23 from matplotlib
import pyplot
as plt
35 from time
import gmtime, strftime
38 InitFileName = str(sys.argv[1])
39 print(
'Init file name: ' + InitFileName )
41 InitFileName =
'alice_init.ini'
43 if sys.version_info[0] == 2:
49 from tkFileDialog
import askopenfilename
50 from tkFileDialog
import asksaveasfilename
51 from tkSimpleDialog
import askstring
52 from tkMessageBox
import *
53 if sys.version_info[0] == 3:
55 import urllib.request, urllib.error, urllib.parse
59 from tkinter.filedialog
import askopenfilename
60 from tkinter.filedialog
import asksaveasfilename
61 from tkinter.simpledialog
import askstring
74 RevDate =
"20 Aug 2021"
76 Version_url =
'https://github.com/analogdevicesinc/alice/releases/download/1.3.11/alice-desktop-1.3-setup.exe'
79 R0lGODlhIAAgAHAAACH5BAEAAAIALAAAAAAgACAAgQAAAP///wAAAAAAAAJJhI+py+0PYwtBWkDp
80 hTnv2XlfEobjUZZnmn4se72vJMtcbYN4ruz44uORgiodsfI4Im++2M5VW81OmBbVULxiRVrUsgsO
85 root.title(
"ALICE DeskTop " + SWRev + RevDate +
": ALM1000 Oscilloscope")
86 img = PhotoImage(data=TBicon)
87 root.call(
'wm',
'iconphoto', root._w,
'-default', img)
88 print(
"Windowing System is " + str(root.tk.call(
'tk',
'windowingsystem')))
132 MouseX = MouseY = -10
133 MouseCAV = MouseCAI = MouseCBV = MouseCBI = MouseMuxA = MouseMuxB = MouseMuxC = MouseMuxD = -10
135 COLORframes =
"#000080"
136 COLORcanvas =
"#000000"
137 COLORgrid =
"#808080"
138 COLORzeroline =
"#0000ff"
139 COLORtrace1 =
"#00ff00"
140 COLORtrace2 =
"#ff8000"
141 COLORtrace3 =
"#00ffff"
142 COLORtrace4 =
"#ffff00"
143 COLORtrace5 =
"#ff00ff"
144 COLORtrace6 =
"#C80000"
145 COLORtrace7 =
"#8080ff"
146 COLORtraceR1 =
"#008000"
147 COLORtraceR2 =
"#905000"
148 COLORtraceR3 =
"#008080"
149 COLORtraceR4 =
"#808000"
150 COLORtraceR5 =
"#800080"
151 COLORtraceR6 =
"#800000"
152 COLORtraceR7 =
"#4040a0"
153 COLORtext =
"#ffffff"
154 COLORtrigger =
"#ff0000"
155 COLORsignalband =
"#ff0000"
156 ButtonGreen =
"#00ff00"
157 ButtonRed =
"#ff0000"
162 ColorMode = IntVar(0)
165 ButtonText =
"#000000"
170 LocalLanguage =
"English"
177 BaseSampleRate = 100000
178 AWGSAMPLErate = BaseSampleRate
179 SAMPLErate = BaseSampleRate
186 Slow_Sweep_Limit = 200
190 MathString =
"VBuffA[t] + VBuffB[t]"
192 MathXString =
"VBuffA[t]"
194 MathYString =
"VBuffB[t]"
196 UserAString =
"MaxV1-VATop"
197 UserALabel =
"OverShoot"
198 UserBString =
"MinV2-VBBase"
199 UserBLabel =
"UnderShoot"
203 AWGAMathString =
"(VBuffA + VBuffB)/2"
204 AWGBMathString =
"(VBuffA + VBuffB)/2"
205 AWGAcsvFile =
"examplea.csv"
206 AWGBcsvFile =
"exampleb.csv"
207 AWGAwavFile =
"examplea.wav"
208 AWGBwavFile =
"exampleb.wav"
209 FFTUserWindowString =
"numpy.kaiser(SMPfft, 14) * 3"
210 DigFilterAString =
"numpy.sinc(numpy.linspace(-1, 1, 91))"
211 DigFilterBString =
"numpy.sinc(numpy.linspace(-1, 1, 91))"
212 AWGFilterAString =
"numpy.sinc(numpy.linspace(-1, 1, 91))"
213 AWGFilterBString =
"numpy.sinc(numpy.linspace(-1, 1, 91))"
214 ChaMeasString1 =
"DCV1"
215 ChaMeasString2 =
"DCI1"
216 ChaMeasString3 =
"SV1"
217 ChaMeasString4 =
"MaxV1-MinV1"
218 ChaMeasString5 =
"MaxI1-MinI1"
219 ChaMeasString6 =
"math.sqrt(SV1**2 - DCV1**2)"
220 ChbMeasString1 =
"DCV2"
221 ChbMeasString2 =
"DCI2"
222 ChbMeasString3 =
"SV2"
223 ChbMeasString4 =
"MaxV2-MinV2"
224 ChbMeasString5 =
"MaxI2-MinI2"
225 ChbMeasString6 =
"math.sqrt(SV2**2 - DCV2**2)"
226 ChaLableSrring1 =
"CHA-DCV "
227 ChaLableSrring2 =
"CHA-DCI "
228 ChaLableSrring3 =
"CHA-TRMS "
229 ChaLableSrring4 =
"CHA-VP-P "
230 ChaLableSrring5 =
"CHA-IP-P "
231 ChaLableSrring6 =
"CHA-ACRMS "
232 ChbLableSrring1 =
"CHB-DCV "
233 ChbLableSrring2 =
"CHB-DCI "
234 ChbLableSrring3 =
"CHB-TRMS "
235 ChbLableSrring4 =
"CHB-VP-P "
236 ChbLableSrring5 =
"CHB-IP-P "
237 ChbLableSrring6 =
"CHB-ACRMS "
238 LabelPlotText = IntVar(0)
239 PlotLabelText =
"Custom Plot Label"
241 GridWidth = IntVar(0)
243 TRACEwidth = IntVar(0)
245 TRACEaverage = IntVar(0)
249 LPFTrigger = IntVar(0)
250 Trigger_LPF_length = IntVar(0)
251 Trigger_LPF_length.set(10)
252 HarmonicMarkers = IntVar(0)
253 HarmonicMarkers.set(3)
254 AWGShowAdvanced = IntVar(0)
255 AWGShowAdvanced.set(0)
256 AWG_Amp_Mode = IntVar(0)
258 AWGA_Ext_Gain = DoubleVar(0)
259 AWGA_Ext_Gain.set(1.0)
260 AWGA_Ext_Offset = DoubleVar(0)
261 AWGA_Ext_Offset.set(0.0)
262 AWGB_Ext_Gain = DoubleVar(0)
263 AWGB_Ext_Gain.set(1.0)
264 AWGB_Ext_Offset = DoubleVar(0)
265 AWGB_Ext_Offset.set(0.0)
267 Two_X_Sample = IntVar(0)
269 ADC_Mux_Mode = IntVar(0)
271 Last_ADC_Mux_Mode = 0
272 Alternate_Sweep_Mode = IntVar(0)
273 Alternate_Sweep_Mode.set(0)
275 ChopModeFilter = [0.25, 0.25, 0.25, 0.25]
278 Roll_Mode = IntVar(0)
281 ZEROstuffing = IntVar(0)
283 FFTwindow = IntVar(0)
286 RelPhaseCorrection = 15
287 RelPhaseCenter = IntVar(0)
288 RelPhaseCenter.set(0)
289 ImpedanceCenter = IntVar(0)
290 ImpedanceCenter.set(0)
291 MultipleBoards = IntVar(0)
292 MultipleBoards.set(0)
293 IgnoreFirmwareCheck = 0
296 EnablePhaseAnalizer = 1
297 EnableSpectrumAnalizer = 1
298 EnableBodePlotter = 1
299 EnableImpedanceAnalizer = 1
302 EnableCommandInterface = 0
305 EnableMinigenMode = 0
306 EnablePmodDA1Mode = 0
308 EnableGenericSerialMode = 0
309 EnableAD5626SerialMode = 0
310 EnableDigitalFilter = 0
311 EnableMeasureScreen = 0
314 EnableUserEntries = 0
315 AllowFlashFirmware = 0
317 ShowTraceControls = 0
331 CHA_TC1 = DoubleVar(0)
333 CHA_TC2 = DoubleVar(0)
335 CHB_TC1 = DoubleVar(0)
337 CHB_TC2 = DoubleVar(0)
339 CHA_A1 = DoubleVar(0)
341 CHA_A2 = DoubleVar(0)
343 CHB_A1 = DoubleVar(0)
345 CHB_A2 = DoubleVar(0)
347 Auto_ETS_Comp = IntVar(0)
348 ETS_TC1 = DoubleVar(0)
350 ETS_A1 = DoubleVar(0)
352 ETS_TC2 = DoubleVar(0)
354 ETS_A2 = DoubleVar(0)
360 windowingsystem = root.tk.call(
'tk',
'windowingsystem')
361 ScreenWidth = root.winfo_screenwidth()
362 ScreenHeight = root.winfo_screenheight()
364 if (root.tk.call(
'tk',
'windowingsystem')==
'aqua'):
365 Style_String =
'aqua'
367 root.createcommand(
'::tk::mac::ReopenApplication', root.deiconify)
368 root.createcommand(
'::tk::mac::Quit', root.destroy)
370 root.option_add(
'*tearOff',
False)
371 if sys.version_info[0] == 2:
372 menubar = tKinter.Menu(root)
373 appmenu = tKinter.Menu(menubar, name=
'apple')
375 menubar = tkinter.Menu(root)
376 appmenu = tkinter.Menu(menubar, name=
'apple')
379 menubar.add_cascade(menu=appmenu)
381 root[
'menu'] = menubar
389 path = pathlib.Path(alice.__file__).parent.absolute()
390 filename = os.path.join(path,
"resources", InitFileName)
391 InitFile = open(filename)
392 for line
in InitFile:
394 exec( line.rstrip(), globals(), globals())
397 print(
"Skiping " + line.rstrip())
401 InitFile = open(InitFileName)
402 for line
in InitFile:
404 exec( line.rstrip(), globals(), globals())
407 print(
"Skiping " + line.rstrip())
410 print(
"No Init File Read. " + InitFileName +
" Not Found")
412 XOLXY = X0L = FontSize * 7
413 XOLF = XOLBP = XOLIA = int(FontSize * 4.625)
414 XOLNqP = XOLNiC = int(FontSize * 3.125)
417 root.style.theme_use(Style_String)
419 root.style.theme_use(
'default')
421 root.tk_focusFollowsMouse()
425 if sys.version_info[0] == 2:
426 default_font = tkFont.nametofont(
"TkDefaultFont")
427 if sys.version_info[0] == 3:
428 default_font = tkinter.font.nametofont(
"TkDefaultFont")
429 default_font.configure(size=FontSize)
431 CHvpdiv = (0.001, 0.002, 0.005, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1.0, 2.0, 5.0)
433 CHipdiv = (0.1, 0.2, 0.5, 1.0, 2.0, 5.0, 10.0, 20.0, 50.0, 100.0, 200.0)
435 SAMagdiv = (
"10nV",
"100nV",
"1uV",
"10uV",
"100uV",
"1mV",
"10mV",
"0.1",
"1.0",
"10.0")
437 TMpdiv = (0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1.0, 2.0, 5.0, 10.0, 20.0, 50.0, 100.0, 200.0)
438 ResScalediv = (1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000)
439 SampRateList = (1024, 2048, 4096, 8192, 16384, 32765, 64000, 93023, 93385, 93750, 94118,
440 96385, 96774, 97166, 97561, 97959, 98361, 98765, 99174, 99585, 100000)
441 NoiseList =[
"None",
"Uniform",
"Gaussian"]
443 RefPhase = (
"CA-V",
"CB-V",
"CA-I",
"CB-I")
447 AWGAOffsetvalue = 0.0
451 AWGADutyCyclevalue = 50
454 AWGBOffsetvalue = 0.0
458 AWGBDutyCyclevalue = 50
468 MeasGateStatus = IntVar(0)
469 MeasGateStatus.set(0)
471 DCV1 = DCV2 = MinV1 = MaxV1 = MinV2 = MaxV2 = MidV1 = PPV1 = MidV2 = PPV2 = SV1 = SI1 = 0
473 DCVMuxA = MinVMuxA = MaxVMuxA = MidVMuxA = PPVMuxA = SVMuxA = 0
474 DCVMuxB = MinVMuxB = MaxVMuxB = MidVMuxB = PPVMuxB = SVMuxB = 0
475 DCVMuxC = MinVMuxC = MaxVMuxC = MidVMuxC = PPVMuxC = SVMuxC = 0
476 DCVMuxD = MinVMuxD = MaxVMuxD = MidVMuxD = PPVMuxD = SVMuxD = 0
477 PeakVA = PeakVB = PeakIA = PeakIB = 0.0
478 PeakVMA = PeakVMB = PeakVMC = PeakVMD = 0.0
479 PeakphaseVMA = PeakphaseVMB = PeakphaseVMC = PeakphaseVMD = 0.0
480 PeakfreqVA = PeakfreqVB = PeakfreqIA = PeakfreqIB = 0.0
481 PeakphaseVA = PeakphaseVB = PeakphaseIA = PeakphaseIB = PeakphaseVAB = 0.0
483 DCI1 = DCI2 = MinI1 = MaxI1 = MinI2 = MaxI2 = MidI1 = PPI1 = MidI2 = PPI2 = SV2 = SI2 = 0
484 CHAperiod = CHAfreq = CHBperiod = CHBfreq = 0
486 CHAVGain = CHBVGain = 1.0
487 CHAVOffset = CHBVOffset = 0.0
489 CHAOffset = CHBOffset = CHBAOffset = CHBBOffset = CHBCOffset = CHBDOffset = 2.5
490 CHAIOffset = CHBIOffset = InOffA = InGainA = InOffB = InGainB = 0.0
492 CANVASwidth = GRW + 2 * X0L
493 CANVASheight = GRH + Y0T + (FontSize * 7)
526 DigFiltABoxCar = IntVar(0)
527 DigFiltBBoxCar = IntVar(0)
528 DigDeSkewA = IntVar(0)
529 DigDeSkewB = IntVar(0)
538 AWGFiltABoxCar = IntVar(0)
539 AWGFiltBBoxCar = IntVar(0)
544 SampleRateStatus = IntVar(0)
545 ETSStatus = IntVar(0)
553 VmemoryA = numpy.ones(1)
554 VmemoryB = numpy.ones(1)
555 ImemoryA = numpy.ones(1)
556 ImemoryB = numpy.ones(1)
557 TRACEresetTime =
True
558 TRACEresetFreq =
True
559 AWGScreenStatus = IntVar(0)
609 ScreenTrefresh = IntVar(0)
610 ScreenXYrefresh = IntVar(0)
618 CurrentFreqX = X0LBP + 14
619 FBins = numpy.linspace(0, 50000, num=16384)
620 FStep = numpy.linspace(0, 16384, num=NSteps.get())
621 FSweepMode = IntVar(0)
622 FSweepCont = IntVar(0)
623 FStepSync = IntVar(0)
624 FSweepSync = IntVar(0)
625 ShowCA_VdB = IntVar(0)
627 ShowCB_VdB = IntVar(0)
629 ShowMarkerBP = IntVar(0)
630 ShowCA_RdB = IntVar(0)
631 ShowCA_RP = IntVar(0)
632 ShowCB_RdB = IntVar(0)
633 ShowCB_RP = IntVar(0)
634 ShowMathBP = IntVar(0)
635 ShowRMathBP = IntVar(0)
636 SingleShotSA = IntVar(0)
650 NetworkScreenStatus = IntVar(0)
651 BDSweepFile = IntVar(0)
655 MarkerNum = MarkerFreqNum = 0
658 TCursor = VCursor = 0
661 XCursor = YCursor = 0
663 ShowdBCur = IntVar(0)
664 FCursor = dBCursor = 0
665 ShowBPCur = IntVar(0)
666 ShowBdBCur = IntVar(0)
667 BPCursor = BdBCursor = 0
668 RUNstatus = IntVar(0)
673 DBdivlist = [1, 2, 3, 5, 10, 15, 20]
674 DBdivindex = IntVar(0)
678 DBdivindexBP = IntVar(0)
680 DBlevelBP = IntVar(0)
683 SpectrumScreenStatus = IntVar(0)
684 SmoothCurvesSA = IntVar(0)
685 SmoothCurvesBP = IntVar(0)
687 IAScreenStatus = IntVar(0)
688 NqPScreenStatus = IntVar(0)
690 NiCScreenStatus = IntVar(0)
692 ImpedanceMagnitude = 0.0
694 ImpedanceRseries = 0.0
695 ImpedanceXseries = 0.0
696 Show_Rseries = IntVar(0)
697 Show_Xseries = IntVar(0)
698 Show_Magnitude = IntVar(0)
699 Show_Angle = IntVar(0)
700 Show_RseriesRef = IntVar(0)
701 Show_XseriesRef = IntVar(0)
702 Show_MagnitudeRef = IntVar(0)
703 Show_AngleRef = IntVar(0)
716 IAGridType = IntVar(0)
718 DisplaySeries = IntVar(0)
719 IA_Ext_Conf = IntVar(0)
720 IASweepSaved = IntVar(0)
728 OhmStatus = IntVar(0)
729 OhmRunStatus = IntVar(0)
739 FFTmemoryA = numpy.ones(1)
740 PhaseMemoryA = numpy.ones(1)
741 FFTmemoryB = numpy.ones(1)
742 PhaseMemoryB = numpy.ones(1)
743 SMPfftpwrTwo = IntVar(0)
745 SMPfft = 2 ** SMPfftpwrTwo.get()
747 FFTwindowshape = numpy.ones(SMPfft)
759 FreqTraceMode = IntVar(0)
776 MathScreenStatus = IntVar(0)
778 XYScreenStatus = IntVar(0)
781 YsignalVA = IntVar(0)
782 YsignalVB = IntVar(0)
783 YsignalIA = IntVar(0)
784 YsignalIB = IntVar(0)
786 YsignalMX = IntVar(0)
787 YsignalMY = IntVar(0)
831 SDATAPort = IntVar(0)
832 SLATCHPort = IntVar(0)
836 R0lGODlhGQAYAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/
837 /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
838 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm
839 AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/
840 MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm
841 ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/
842 mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm
843 zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/
844 /5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ
845 AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA
846 M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ
847 ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A
848 mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z
849 zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///ywAAAAAGQAYAAAIZwAfCBxI
850 sKDBgw8AKFzIsKFChA4jMoQoUSJFAAgHLryYUeDGgx8zhiw4EuRDkxg7ltR4UmRLki9RclQZk2VK
851 lzdh5pTJE+dMnz1/6uyYsKZHowRXHt1pcGREohUbQo2qNKlDolgFBgQAOw==
853 hipulseimg = PhotoImage(data=hipulse)
856 R0lGODlhGQAYAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/
857 /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
858 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm
859 AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/
860 MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm
861 ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/
862 mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm
863 zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/
864 /5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ
865 AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA
866 M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ
867 ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A
868 mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z
869 zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///ywAAAAAGQAYAAAIZwAfCBxI
870 sKBBggASKgRwEOHChwsbDoRIkaHEBxQdWpSosGHHix8NhvSYkORGkyhBljw4kuVKkS9TwjzpkubE
871 mDVl6tR4ESPOmzYLtgTac6hAozxzqgzqkynRmhUhmoz6cCpVpD0vBgQAOw==
873 lowpulseimg = PhotoImage(data=lowpulse)
903 self.
widget.after_cancel(id)
907 x, y, cx, cy = self.
widget.bbox(
"insert")
908 x += self.
widget.winfo_rootx() + 25
909 y += self.
widget.winfo_rooty() + 20
913 self.
tw.wm_overrideredirect(
True)
914 self.
tw.wm_geometry(
"+%d+%d" % (x, y))
915 label = Label(self.
tw, text=self.
text, justify=
'left',
916 background=
"#ffffe0", foreground=
"#000000",
917 relief=
'solid', borderwidth=1,
934 global TgInput, TgEdge, ManualTrigger, SingleShot, AutoLevel, SingleShotSA
935 global root, freqwindow, awgwindow, iawindow, xywindow, win1, win2
936 global TRIGGERentry, TMsb, Xsignal, AutoCenterA, AutoCenterB
937 global YsignalVA, YsignalIA, YsignalVB, YsignalIB, YsignalM, YsignalMX, YsignalMY
938 global CHAsb, CHAIsb, CHBsb, CHBIsb, HScale, FreqTraceMode
939 global CHAsbxy, CHAIsbxy, CHBsbxy, CHBIsbxy, HoldOffentry
940 global CHAVPosEntryxy, CHBVPosEntryxy, CHAIPosEntryxy, CHBIPosEntryxy
941 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, MathTrace, MathXUnits, MathYUnits
942 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
943 global AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry, AWGADutyCycleEntry
944 global AWGAPhaseEntry, AWGAShape, AWGATerm, AWGAMode, AWGARepeatFlag, AWGBRepeatFlag
945 global AWGBAmplEntry, AWGBOffsetEntry, AWGBFreqEntry, AWGBDutyCycleEntry
946 global AWGBPhaseEntry, AWGBShape, AWGBTerm, AWGBMode, AWGSync, AWGAIOMode, AWGBIOMode
947 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
948 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1, MeasDCI1, MeasMinI1
949 global MeasMaxI1, MeasMidI1, MeasPPI1, MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2
950 global MeasPPV2, MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2, MeasDiffAB, MeasDiffBA
951 global MeasRMSV1, MeasRMSV2, MeasRMSI1, MeasRMSI2, MeasPhase
952 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ, IASource, DisplaySeries
953 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
954 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
955 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, CutDC, DacScreenStatus, DigScreenStatus
956 global FFTwindow, DBdivindex, DBlevel, TRACEmodeTime, TRACEaverage, Vdiv
957 global SMPfftpwrTwo, SMPfft, StartFreqEntry, StopFreqEntry, ZEROstuffing
958 global TimeDisp, XYDisp, FreqDisp, IADisp, XYScreenStatus, IAScreenStatus, SpectrumScreenStatus
959 global RsystemEntry, ResScale, GainCorEntry, PhaseCorEntry, AWGAPhaseDelay, AWGBPhaseDelay
960 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2, MeasDelay
961 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxScreenStatus, MuxEnb, ChopMuxMode, ChopTrig, DualMuxMode
962 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry, muxwindow
963 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry, HozPossentry
964 global SmoothCurvesBP, bodewindow, AWG_Amp_Mode, ColorMode
965 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMarkerBP, BodeDisp
966 global ShowCA_RdB, ShowCA_RP, ShowCB_RdB, ShowCB_RP, ShowMathBP, ShowRMathBP
967 global BPSweepMode, BPSweepCont, BodeScreenStatus, RevDate, SweepStepBodeEntry
968 global HScaleBP, StopBodeEntry, StartBodeEntry, ShowBPCur, ShowBdBCur, BPCursor, BdBCursor
969 global MathString, MathXString, MathYString, UserAString, UserALabel, UserBString, UserBLabel
970 global MathAxis, MathXAxis, MathYAxis, Show_MathX, Show_MathY, MathScreenStatus, MathWindow
971 global AWGAMathString, AWGBMathString, FFTUserWindowString, DigFilterAString, DigFilterBString
972 global GRWF, GRHF, GRWBP, GRHBP, GRWXY, GRHXY, GRWIA, GRHIA, MeasureStatus
973 global ChaLableSrring1, ChaLableSrring2, ChaLableSrring3, ChaLableSrring4, ChaLableSrring5, ChaLableSrring6
974 global ChbLableSrring1, ChbLableSrring2, ChbLableSrring3, ChbLableSrring4, ChbLableSrring5, ChbLableSrring6
975 global ChaMeasString1, ChaMeasString2, ChaMeasString3, ChaMeasString4, ChaMeasString5, ChaMeasString6
976 global ChbMeasString1, ChbMeasString2, ChbMeasString3, ChbMeasString4, ChbMeasString5, ChbMeasString6
977 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2, CHAI_RC_HP, CHBI_RC_HP
978 global CHA_A1, CHA_A2, CHB_A1, CHB_A2, RelPhaseCenter, ImpedanceCenter, NetworkScreenStatus
979 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
980 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
981 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle
982 global AWGABurstFlag, AWGACycles, AWGABurstDelay, AWGAcsvFile, AWGBcsvFile
983 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay, AWGAwavFile, AWGBwavFile
984 global SCLKPort, SDATAPort, SLATCHPort, EnableHSsampling, FminEntry, HtMulEntry
985 global Auto_ETS_Comp, ETS_TC1, ETS_A1, ETS_TC2, ETS_A2
986 global ets_TC1Entry, ets_A1Entry, ets_TC2Entry, ets_A2Entry
987 global DigFiltStatus, DigFiltABoxCar, DigFiltBBoxCar, BCALenEntry, BCBLenEntry
988 global phawindow, PhAca, PhAScreenStatus, PhADisp
989 global GRWPhA, X0LPhA, GRHPhA, Y0TPhA, BoardStatus, boardwindow, BrdSel
990 global VScale, IScale, RefphEntry, EnableScopeOnly, Roll_Mode
991 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn
992 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D, ScreenWidth, ScreenHeight
993 global AWGANoiseEntry, AWGBNoiseEntry, AWGAsbnoise, AWGBsbnoise
994 global AWGFiltA, AWGALenEntry, AWGFiltABoxCar, AWGFiltALength, digfltwindow
995 global AWGFiltB, AWGBLenEntry, AWGFiltBBoxCar, AWGFiltBLength
999 ConfgFile = open(filename,
"w")
1003 ConfgFile.write(
"root.geometry('+" + str(root.winfo_x()) +
'+' + str(root.winfo_y()) +
"')\n")
1004 if EnableScopeOnly == 0:
1005 ConfgFile.write(
"awgwindow.geometry('+" + str(awgwindow.winfo_x()) +
'+' + str(awgwindow.winfo_y()) +
"')\n")
1006 ConfgFile.write(
'GRW = ' + str(GRW) +
'\n')
1007 ConfgFile.write(
'GRH = ' + str(GRH) +
'\n')
1008 ConfgFile.write(
'ColorMode.set(' + str(ColorMode.get()) +
')\n')
1010 ConfgFile.write(
'MathString = "' + MathString +
'"\n')
1011 ConfgFile.write(
'MathUnits = "' + MathUnits +
'"\n')
1012 ConfgFile.write(
'MathAxis = "' + MathAxis +
'"\n')
1013 ConfgFile.write(
'MathXString = "' + MathXString +
'"\n')
1014 ConfgFile.write(
'MathXUnits = "' + MathXUnits +
'"\n')
1015 ConfgFile.write(
'MathXAxis = "' + MathXAxis +
'"\n')
1016 ConfgFile.write(
'MathYString = "' + MathYString +
'"\n')
1017 ConfgFile.write(
'MathYUnits = "' + MathYUnits +
'"\n')
1018 ConfgFile.write(
'MathYAxis = "' + MathYAxis +
'"\n')
1019 if BoardStatus.get() > 0:
1020 ConfgFile.write(
'MakeBoardScreen()\n')
1021 ConfgFile.write(
"boardwindow.geometry('+" + str(boardwindow.winfo_x()) +
'+' + str(boardwindow.winfo_y()) +
"')\n")
1022 ConfgFile.write(
'BrdSel.set(' + str(BrdSel.get()) +
')\n')
1023 ConfgFile.write(
'SelectBoard()\n')
1025 ConfgFile.write(
'DestroyBoardScreen()\n')
1026 if MathScreenStatus.get() > 0:
1027 ConfgFile.write(
'NewEnterMathControls()\n')
1028 ConfgFile.write(
"MathWindow.geometry('+" + str(MathWindow.winfo_x()) +
'+' + str(MathWindow.winfo_y()) +
"')\n")
1030 ConfgFile.write(
'DestroyMathScreen()\n')
1031 if XYScreenStatus.get() > 0:
1032 ConfgFile.write(
'GRWXY = ' + str(GRWXY) +
'\n')
1033 ConfgFile.write(
'GRHXY = ' + str(GRHXY) +
'\n')
1034 ConfgFile.write(
'MakeXYWindow()\n')
1035 ConfgFile.write(
"xywindow.geometry('+" + str(xywindow.winfo_x()) +
'+' + str(xywindow.winfo_y()) +
"')\n")
1036 ConfgFile.write(
'CHAsbxy.delete(0,END)\n')
1037 ConfgFile.write(
'CHAsbxy.insert(0, ' + CHAsbxy.get() +
')\n')
1038 ConfgFile.write(
'CHAIsbxy.delete(0,END)\n')
1039 ConfgFile.write(
'CHAIsbxy.insert(0, ' + CHAIsbxy.get() +
')\n')
1040 ConfgFile.write(
'CHAVPosEntryxy.delete(0,END)\n')
1041 ConfgFile.write(
'CHAVPosEntryxy.insert(4, ' + CHAVPosEntryxy.get() +
')\n')
1042 ConfgFile.write(
'CHAIPosEntryxy.delete(0,END)\n')
1043 ConfgFile.write(
'CHAIPosEntryxy.insert(4, ' + CHAIPosEntryxy.get() +
')\n')
1044 ConfgFile.write(
'CHBsbxy.delete(0,END)\n')
1045 ConfgFile.write(
'CHBsbxy.insert(0, ' + CHBsbxy.get() +
')\n')
1046 ConfgFile.write(
'CHBIsbxy.delete(0,END)\n')
1047 ConfgFile.write(
'CHBIsbxy.insert(0, ' + CHBIsbxy.get() +
')\n')
1048 ConfgFile.write(
'CHBVPosEntryxy.delete(0,END)\n')
1049 ConfgFile.write(
'CHBVPosEntryxy.insert(4, ' + CHBVPosEntryxy.get() +
')\n')
1050 ConfgFile.write(
'CHBIPosEntryxy.delete(0,END)\n')
1051 ConfgFile.write(
'CHBIPosEntryxy.insert(4, ' + CHBIPosEntryxy.get() +
')\n')
1053 ConfgFile.write(
'DestroyXYScreen()\n')
1054 if IAScreenStatus.get() > 0:
1055 ConfgFile.write(
'GRWIA = ' + str(GRWIA) +
'\n')
1056 ConfgFile.write(
'GRHIA = ' + str(GRHIA) +
'\n')
1057 ConfgFile.write(
'MakeIAWindow()\n')
1058 ConfgFile.write(
"iawindow.geometry('+" + str(iawindow.winfo_x()) +
'+' + str(iawindow.winfo_y()) +
"')\n")
1059 ConfgFile.write(
'IASource.set(' + str(IASource.get()) +
')\n')
1060 ConfgFile.write(
'DisplaySeries.set(' + str(DisplaySeries.get()) +
')\n')
1061 ConfgFile.write(
'RsystemEntry.delete(0,END)\n')
1062 ConfgFile.write(
'RsystemEntry.insert(5, ' + RsystemEntry.get() +
')\n')
1063 ConfgFile.write(
'ResScale.delete(0,END)\n')
1064 ConfgFile.write(
'ResScale.insert(5, ' + ResScale.get() +
')\n')
1065 ConfgFile.write(
'GainCorEntry.delete(0,END)\n')
1066 ConfgFile.write(
'GainCorEntry.insert(5, ' + GainCorEntry.get() +
')\n')
1067 ConfgFile.write(
'PhaseCorEntry.delete(0,END)\n')
1068 ConfgFile.write(
'PhaseCorEntry.insert(5, ' + PhaseCorEntry.get() +
')\n')
1069 ConfgFile.write(
'NetworkScreenStatus.set(' + str(NetworkScreenStatus.get()) +
')\n')
1071 ConfgFile.write(
'DestroyIAScreen()\n')
1072 if SpectrumScreenStatus.get() > 0:
1073 ConfgFile.write(
'GRWF = ' + str(GRWF) +
'\n')
1074 ConfgFile.write(
'GRHF = ' + str(GRHF) +
'\n')
1075 ConfgFile.write(
'RelPhaseCenter.set(' + str(RelPhaseCenter.get()) +
')\n')
1076 ConfgFile.write(
'MakeSpectrumWindow()\n')
1077 ConfgFile.write(
"freqwindow.geometry('+" + str(freqwindow.winfo_x()) +
'+' + str(freqwindow.winfo_y()) +
"')\n")
1078 ConfgFile.write(
'ShowC1_VdB.set(' + str(ShowC1_VdB.get()) +
')\n')
1079 ConfgFile.write(
'ShowC1_P.set(' + str(ShowC1_P.get()) +
')\n')
1080 ConfgFile.write(
'ShowC2_VdB.set(' + str(ShowC2_VdB.get()) +
')\n')
1081 ConfgFile.write(
'ShowC2_P.set(' + str(ShowC2_P.get()) +
')\n')
1082 ConfgFile.write(
'StartFreqEntry.delete(0,END)\n')
1083 ConfgFile.write(
'StartFreqEntry.insert(5, ' + StartFreqEntry.get() +
')\n')
1084 ConfgFile.write(
'StopFreqEntry.delete(0,END)\n')
1085 ConfgFile.write(
'StopFreqEntry.insert(5, ' + StopFreqEntry.get() +
')\n')
1086 ConfgFile.write(
'HScale.set(' + str(HScale.get()) +
')\n')
1087 ConfgFile.write(
'FreqTraceMode.set(' + str(FreqTraceMode.get()) +
')\n')
1088 ConfgFile.write(
'SingleShotSA.set(' + str(SingleShotSA.get()) +
')\n')
1090 ConfgFile.write(
'DestroySpectrumScreen()\n')
1092 if DacScreenStatus.get() > 0:
1093 ConfgFile.write(
'MakeDacScreen()\n')
1094 ConfgFile.write(
"win1.geometry('+" + str(win1.winfo_x()) +
'+' + str(win1.winfo_y()) +
"')\n")
1096 ConfgFile.write(
'DestroyDacScreen()\n')
1097 if DigScreenStatus.get() > 0:
1098 ConfgFile.write(
'MakeDigScreen()\n')
1099 ConfgFile.write(
"win2.geometry('+" + str(win2.winfo_x()) +
'+' + str(win2.winfo_y()) +
"')\n")
1101 ConfgFile.write(
'DestroyDigScreen()\n')
1102 if EnableHSsampling > 0:
1103 ConfgFile.write(
'FminEntry.delete(0,"end")\n')
1104 ConfgFile.write(
'FminEntry.insert(0, ' + FminEntry.get() +
')\n')
1105 ConfgFile.write(
'HtMulEntry.delete(0,"end")\n')
1106 ConfgFile.write(
'HtMulEntry.insert(0, ' + HtMulEntry.get() +
')\n')
1107 ConfgFile.write(
'Auto_ETS_Comp.set(' + str(Auto_ETS_Comp.get()) +
')\n')
1109 ConfgFile.write(
'ets_TC1Entry.delete(0,"end")\n')
1110 ConfgFile.write(
'ets_TC1Entry.insert(0, ' + ets_TC1Entry.get() +
')\n')
1111 ConfgFile.write(
'ETS_TC1.set(' + ets_TC1Entry.get() +
')\n')
1112 ConfgFile.write(
'ets_A1Entry.delete(0,"end")\n')
1113 ConfgFile.write(
'ets_A1Entry.insert(0, ' + ets_A1Entry.get() +
')\n')
1114 ConfgFile.write(
'ETS_A1.set(' + ets_A1Entry.get() +
')\n')
1115 ConfgFile.write(
'ets_TC2Entry.delete(0,"end")\n')
1116 ConfgFile.write(
'ets_TC2Entry.insert(0, ' + ets_TC2Entry.get() +
')\n')
1117 ConfgFile.write(
'ETS_TC2.set(' + ets_TC2Entry.get() +
')\n')
1118 ConfgFile.write(
'ets_A2Entry.delete(0,"end")\n')
1119 ConfgFile.write(
'ets_A2Entry.insert(0, ' + ets_A2Entry.get() +
')\n')
1120 ConfgFile.write(
'ETS_A2.set(' + ets_A2Entry.get() +
')\n')
1122 ConfgFile.write(
'ETS_TC1.set(' + str(ETS_TC1.get()) +
')\n')
1123 ConfgFile.write(
'ETS_A1.set(' + str(ETS_A1.get()) +
')\n')
1124 ConfgFile.write(
'ETS_TC2.set(' + str(ETS_TC2.get()) +
')\n')
1125 ConfgFile.write(
'ETS_A2.set(' + str(ETS_A2.get()) +
')\n')
1126 if DigFiltStatus.get() == 1:
1127 ConfgFile.write(
'MakeDigFiltWindow()\n')
1128 ConfgFile.write(
"digfltwindow.geometry('+" + str(digfltwindow.winfo_x()) +
'+' + str(digfltwindow.winfo_y()) +
"')\n")
1129 ConfgFile.write(
'DigFiltABoxCar.set(' + str(DigFiltABoxCar.get()) +
')\n')
1130 ConfgFile.write(
'DigFiltBBoxCar.set(' + str(DigFiltBBoxCar.get()) +
')\n')
1131 ConfgFile.write(
'BCALenEntry.delete(0,"end")\n')
1132 ConfgFile.write(
'BCALenEntry.insert(0, ' + BCALenEntry.get() +
')\n')
1133 ConfgFile.write(
'BCBLenEntry.delete(0,"end")\n')
1134 ConfgFile.write(
'BCBLenEntry.insert(0, ' + BCBLenEntry.get() +
')\n')
1135 ConfgFile.write(
'AWGALenEntry.delete(0,"end")\n')
1136 ConfgFile.write(
'AWGALenEntry.insert(0, ' + AWGALenEntry.get() +
')\n')
1137 ConfgFile.write(
'AWGFiltABoxCar.set(' + str(AWGFiltABoxCar.get()) +
')\n')
1138 ConfgFile.write(
'AWGBLenEntry.delete(0,"end")\n')
1139 ConfgFile.write(
'AWGBLenEntry.insert(0, ' + AWGBLenEntry.get() +
')\n')
1140 ConfgFile.write(
'AWGFiltBBoxCar.set(' + str(AWGFiltBBoxCar.get()) +
')\n')
1141 ConfgFile.write(
'BuildBoxCarA()\n')
1142 ConfgFile.write(
'BuildBoxCarB()\n')
1143 ConfgFile.write(
'BuildAWGBoxCarA()\n')
1144 ConfgFile.write(
'BuildAWGBoxCarB()\n')
1146 ConfgFile.write(
'DestroyDigFiltScreen()\n')
1147 if MinigenScreenStatus.get() == 1:
1148 ConfgFile.write(
'MakeMinigenWindow()\n')
1149 ConfgFile.write(
"minigenwindow.geometry('+" + str(minigenwindow.winfo_x()) +
'+' + str(minigenwindow.winfo_y()) +
"')\n")
1150 ConfgFile.write(
'MinigenMode.set(' + str(MinigenMode.get()) +
')\n')
1151 ConfgFile.write(
'MinigenFout.delete(0,END)\n')
1152 ConfgFile.write(
'MinigenFout.insert(4, ' + MinigenFout.get() +
')\n')
1153 ConfgFile.write(
'MinigenFclk.delete(0,END)\n')
1154 ConfgFile.write(
'MinigenFclk.insert(4, ' + MinigenFclk.get() +
')\n')
1155 ConfgFile.write(
'SCLKPort.set(' + str(SCLKPort.get()) +
')\n')
1156 ConfgFile.write(
'SDATAPort.set(' + str(SDATAPort.get()) +
')\n')
1157 ConfgFile.write(
'SLATCHPort.set(' + str(SLATCHPort.get()) +
')\n')
1159 ConfgFile.write(
'DestroyMinigenScreen()\n')
1160 if MuxScreenStatus.get() == 1:
1161 ConfgFile.write(
'MakeMuxModeWindow()\n')
1162 ConfgFile.write(
"muxwindow.geometry('+" + str(muxwindow.winfo_x()) +
'+' + str(muxwindow.winfo_y()) +
"')\n")
1163 ConfgFile.write(
'Show_CBA.set(' + str(Show_CBA.get()) +
')\n')
1164 ConfgFile.write(
'Show_CBB.set(' + str(Show_CBB.get()) +
')\n')
1165 ConfgFile.write(
'Show_CBC.set(' + str(Show_CBC.get()) +
')\n')
1166 ConfgFile.write(
'Show_CBD.set(' + str(Show_CBD.get()) +
')\n')
1167 ConfgFile.write(
'MuxEnb.set(' + str(MuxEnb.get()) +
')\n')
1168 ConfgFile.write(
'DualMuxMode.set(' + str(DualMuxMode.get()) +
')\n')
1169 ConfgFile.write(
'ChopMuxMode.set(' + str(ChopMuxMode.get()) +
')\n')
1170 ConfgFile.write(
'ChopTrig.set(' + str(ChopTrig.get()) +
')\n')
1171 ConfgFile.write(
'CHB_Asb.delete(0,END)\n')
1172 ConfgFile.write(
'CHB_Asb.insert(0, ' + CHB_Asb.get() +
')\n')
1173 ConfgFile.write(
'CHB_Bsb.delete(0,END)\n')
1174 ConfgFile.write(
'CHB_Bsb.insert(0, ' + CHB_Bsb.get() +
')\n')
1175 ConfgFile.write(
'CHB_Csb.delete(0,END)\n')
1176 ConfgFile.write(
'CHB_Csb.insert(0, ' + CHB_Csb.get() +
')\n')
1177 ConfgFile.write(
'CHB_Dsb.delete(0,END)\n')
1178 ConfgFile.write(
'CHB_Dsb.insert(0, ' + CHB_Dsb.get() +
')\n')
1179 ConfgFile.write(
'CHB_APosEntry.delete(0,END)\n')
1180 ConfgFile.write(
'CHB_APosEntry.insert(4, ' + CHB_APosEntry.get() +
')\n')
1181 ConfgFile.write(
'CHB_BPosEntry.delete(0,END)\n')
1182 ConfgFile.write(
'CHB_BPosEntry.insert(4, ' + CHB_BPosEntry.get() +
')\n')
1183 ConfgFile.write(
'CHB_CPosEntry.delete(0,END)\n')
1184 ConfgFile.write(
'CHB_CPosEntry.insert(4, ' + CHB_CPosEntry.get() +
')\n')
1185 ConfgFile.write(
'CHB_DPosEntry.delete(0,END)\n')
1186 ConfgFile.write(
'CHB_DPosEntry.insert(4, ' + CHB_DPosEntry.get() +
')\n')
1188 ConfgFile.write(
'DestroyMuxScreen()\n')
1190 if PhAScreenStatus.get() > 0:
1191 ConfgFile.write(
'GRWPhA = ' + str(GRWPhA) +
'\n')
1192 ConfgFile.write(
'GRHPhA = ' + str(GRHPhA) +
'\n')
1193 ConfgFile.write(
'MakePhAWindow()\n')
1194 ConfgFile.write(
"phawindow.geometry('+" + str(phawindow.winfo_x()) +
'+' + str(phawindow.winfo_y()) +
"')\n")
1195 ConfgFile.write(
'VScale.delete(0,END)\n')
1196 ConfgFile.write(
'VScale.insert(0, ' + str(VScale.get()) +
')\n')
1197 ConfgFile.write(
'IScale.delete(0,END)\n')
1198 ConfgFile.write(
'IScale.insert(0, ' + str(IScale.get()) +
')\n')
1199 ConfgFile.write(
'RefphEntry.delete(0,END)\n')
1200 ConfgFile.write(
'RefphEntry.insert(0, "' + str(RefphEntry.get()) +
'")\n')
1201 if vat_btn.config(
'text')[-1] ==
'OFF':
1202 ConfgFile.write(
'vat_btn.config(text="OFF", style="Stop.TButton")\n')
1204 ConfgFile.write(
'vat_btn.config(text="ON", style="Run.TButton")\n')
1205 if MuxScreenStatus.get() == 0:
1206 if vbt_btn.config(
'text')[-1] ==
'OFF':
1207 ConfgFile.write(
'vbt_btn.config(text="OFF", style="Stop.TButton")\n')
1209 ConfgFile.write(
'vbt_btn.config(text="ON", style="Run.TButton")\n')
1210 if vabt_btn.config(
'text')[-1] ==
'OFF':
1211 ConfgFile.write(
'vabt_btn.config(text="OFF", style="Stop.TButton")\n')
1213 ConfgFile.write(
'vabt_btn.config(text="ON", style="Run.TButton")\n')
1215 ConfgFile.write(
'ShowPB_A.set(' + str(ShowPB_A.get()) +
')\n')
1216 ConfgFile.write(
'ShowPB_B.set(' + str(ShowPB_B.get()) +
')\n')
1217 ConfgFile.write(
'ShowPB_C.set(' + str(ShowPB_C.get()) +
')\n')
1218 ConfgFile.write(
'ShowPB_D.set(' + str(ShowPB_D.get()) +
')\n')
1219 if iat_btn.config(
'text')[-1] ==
'OFF':
1220 ConfgFile.write(
'iat_btn.config(text="OFF", style="Stop.TButton")\n')
1222 ConfgFile.write(
'iat_btn.config(text="ON", style="Run.TButton")\n')
1223 if ibt_btn.config(
'text')[-1] ==
'OFF':
1224 ConfgFile.write(
'ibt_btn.config(text="OFF", style="Stop.TButton")\n')
1226 ConfgFile.write(
'ibt_btn.config(text="ON", style="Run.TButton")\n')
1229 ConfgFile.write(
'DestroyPhAScreen()\n')
1230 if BodeScreenStatus.get() == 1:
1231 ConfgFile.write(
'GRWBP = ' + str(GRWBP) +
'\n')
1232 ConfgFile.write(
'GRHBP = ' + str(GRHBP) +
'\n')
1233 ConfgFile.write(
'RelPhaseCenter.set(' + str(RelPhaseCenter.get()) +
')\n')
1234 ConfgFile.write(
'ImpedanceCenter.set(' + str(ImpedanceCenter.get()) +
')\n')
1235 ConfgFile.write(
'MakeBodeWindow()\n')
1236 ConfgFile.write(
"bodewindow.geometry('+" + str(bodewindow.winfo_x()) +
'+' + str(bodewindow.winfo_y()) +
"')\n")
1237 ConfgFile.write(
'ShowCA_VdB.set(' + str(ShowCA_VdB.get()) +
')\n')
1238 ConfgFile.write(
'ShowCB_VdB.set(' + str(ShowCB_VdB.get()) +
')\n')
1239 ConfgFile.write(
'ShowCA_P.set(' + str(ShowCA_P.get()) +
')\n')
1240 ConfgFile.write(
'ShowCB_P.set(' + str(ShowCB_P.get()) +
')\n')
1241 ConfgFile.write(
'ShowCA_RdB.set(' + str(ShowCA_RdB.get()) +
')\n')
1242 ConfgFile.write(
'ShowCA_RP.set(' + str(ShowCA_RP.get()) +
')\n')
1243 ConfgFile.write(
'ShowCB_RdB.set(' + str(ShowCB_RdB.get()) +
')\n')
1244 ConfgFile.write(
'ShowCB_RP.set(' + str(ShowCB_RP.get()) +
')\n')
1245 ConfgFile.write(
'BodeDisp.set(' + str(BodeDisp.get()) +
')\n')
1246 ConfgFile.write(
'ShowMarkerBP.set(' + str(ShowMarkerBP.get()) +
')\n')
1247 ConfgFile.write(
'ShowMathBP.set(' + str(ShowMathBP.get()) +
')\n')
1248 ConfgFile.write(
'ShowRMathBP.set(' + str(ShowRMathBP.get()) +
')\n')
1249 ConfgFile.write(
'HScaleBP.set(' + str(HScaleBP.get()) +
')\n')
1250 ConfgFile.write(
'NSteps.set(' + str(NSteps.get()) +
')\n')
1251 ConfgFile.write(
'DBdivindexBP.set(' + str(DBdivindexBP.get()) +
')\n')
1252 ConfgFile.write(
'DBlevelBP.set(' + str(DBlevelBP.get()) +
')\n')
1253 ConfgFile.write(
'FSweepMode.set(' + str(FSweepMode.get()) +
')\n')
1254 ConfgFile.write(
'SweepStepBodeEntry.delete(0,END)\n')
1255 ConfgFile.write(
'SweepStepBodeEntry.insert(4, ' + SweepStepBodeEntry.get() +
')\n')
1256 ConfgFile.write(
'StopBodeEntry.delete(0,END)\n')
1257 ConfgFile.write(
'StopBodeEntry.insert(4, ' + StopBodeEntry.get() +
')\n')
1258 ConfgFile.write(
'StartBodeEntry.delete(0,END)\n')
1259 ConfgFile.write(
'StartBodeEntry.insert(4, ' + StartBodeEntry.get() +
')\n')
1260 ConfgFile.write(
'Show_Rseries.set(' + str(Show_Rseries.get()) +
')\n')
1261 ConfgFile.write(
'Show_Xseries.set(' + str(Show_Xseries.get()) +
')\n')
1262 ConfgFile.write(
'Show_Magnitude.set(' + str(Show_Magnitude.get()) +
')\n')
1263 ConfgFile.write(
'Show_Angle.set(' + str(Show_Angle.get()) +
')\n')
1265 ConfgFile.write(
'DestroyBodeScreen()\n')
1266 if MeasureStatus.get() == 1:
1268 ConfgFile.write(
'ChaLableSrring1 = "' + ChaLableSrring1 +
'"\n')
1269 ConfgFile.write(
'ChaLableSrring2 = "' + ChaLableSrring2 +
'"\n')
1270 ConfgFile.write(
'ChaLableSrring3 = "' + ChaLableSrring3 +
'"\n')
1271 ConfgFile.write(
'ChaLableSrring4 = "' + ChaLableSrring4 +
'"\n')
1272 ConfgFile.write(
'ChaLableSrring5 = "' + ChaLableSrring5 +
'"\n')
1273 ConfgFile.write(
'ChaLableSrring6 = "' + ChaLableSrring6 +
'"\n')
1274 ConfgFile.write(
'ChbLableSrring1 = "' + ChbLableSrring1 +
'"\n')
1275 ConfgFile.write(
'ChbLableSrring2 = "' + ChbLableSrring2 +
'"\n')
1276 ConfgFile.write(
'ChbLableSrring3 = "' + ChbLableSrring3 +
'"\n')
1277 ConfgFile.write(
'ChbLableSrring4 = "' + ChbLableSrring4 +
'"\n')
1278 ConfgFile.write(
'ChbLableSrring5 = "' + ChbLableSrring5 +
'"\n')
1279 ConfgFile.write(
'ChbLableSrring6 = "' + ChbLableSrring6 +
'"\n')
1280 ConfgFile.write(
'ChaMeasString1 = "' + ChaMeasString1 +
'"\n')
1281 ConfgFile.write(
'ChaMeasString2 = "' + ChaMeasString2 +
'"\n')
1282 ConfgFile.write(
'ChaMeasString3 = "' + ChaMeasString3 +
'"\n')
1283 ConfgFile.write(
'ChaMeasString4 = "' + ChaMeasString4 +
'"\n')
1284 ConfgFile.write(
'ChaMeasString5 = "' + ChaMeasString5 +
'"\n')
1285 ConfgFile.write(
'ChaMeasString6 = "' + ChaMeasString6 +
'"\n')
1286 ConfgFile.write(
'ChbMeasString1 = "' + ChbMeasString1 +
'"\n')
1287 ConfgFile.write(
'ChbMeasString2 = "' + ChbMeasString2 +
'"\n')
1288 ConfgFile.write(
'ChbMeasString3 = "' + ChbMeasString3 +
'"\n')
1289 ConfgFile.write(
'ChbMeasString4 = "' + ChbMeasString4 +
'"\n')
1290 ConfgFile.write(
'ChbMeasString5 = "' + ChbMeasString5 +
'"\n')
1291 ConfgFile.write(
'ChbMeasString6 = "' + ChbMeasString6 +
'"\n')
1292 ConfgFile.write(
'MakeMeasureScreen()\n')
1293 ConfgFile.write(
"measurewindow.geometry('+" + str(measurewindow.winfo_x()) +
'+' + str(measurewindow.winfo_y()) +
"')\n")
1295 ConfgFile.write(
'DestroyMeasuewScreen()\n')
1296 if ETSStatus.get() == 1:
1297 ConfgFile.write(
'MakeETSWindow()\n')
1298 ConfgFile.write(
"etswindow.geometry('+" + str(etswindow.winfo_x()) +
'+' + str(etswindow.winfo_y()) +
"')\n")
1299 ConfgFile.write(
'ETSDisp.set(' + str(ETSDisp.get()) +
')\n')
1300 ConfgFile.write(
'ETSDir.set(' + str(ETSDir.get()) +
')\n')
1301 ConfgFile.write(
'FMulXEntry.delete(0,END)\n')
1302 ConfgFile.write(
'FMulXEntry.insert(6, ' + FMulXEntry.get() +
')\n')
1303 ConfgFile.write(
'DivXEntry.delete(0,END)\n')
1304 ConfgFile.write(
'DivXEntry.insert(4, ' + DivXEntry.get() +
')\n')
1305 ConfgFile.write(
'ETSts.delete(0,END)\n')
1306 ConfgFile.write(
'ETSts.insert(4, ' + ETSts.get() +
')\n')
1308 ConfgFile.write(
'DestroyETSScreen()\n')
1310 ConfgFile.write(
'TRIGGERentry.delete(0,END)\n')
1311 ConfgFile.write(
'TRIGGERentry.insert(4, ' + TRIGGERentry.get() +
')\n')
1312 ConfgFile.write(
'HoldOffentry.delete(0,"end")\n')
1313 ConfgFile.write(
'HoldOffentry.insert(0, ' + HoldOffentry.get() +
')\n')
1314 ConfgFile.write(
'HozPossentry.delete(0,"end")\n')
1315 ConfgFile.write(
'HozPossentry.insert(0, ' + HozPossentry.get() +
')\n')
1316 ConfgFile.write(
'TMsb.delete(0,END)\n')
1317 ConfgFile.write(
'TMsb.insert(0, ' + TMsb.get() +
')\n')
1318 ConfgFile.write(
'TgInput.set(' + str(TgInput.get()) +
')\n')
1319 ConfgFile.write(
'AutoLevel.set(' + str(AutoLevel.get()) +
')\n')
1320 ConfgFile.write(
'ManualTrigger.set(' + str(ManualTrigger.get()) +
')\n')
1321 ConfgFile.write(
'SingleShot.set(' + str(SingleShot.get()) +
')\n')
1322 ConfgFile.write(
'TgEdge.set(' + str(TgEdge.get()) +
')\n')
1323 ConfgFile.write(
'Roll_Mode.set(' + str(Roll_Mode.get()) +
')\n')
1324 ConfgFile.write(
'Xsignal.set(' + str(Xsignal.get()) +
')\n')
1325 ConfgFile.write(
'YsignalVA.set(' + str(YsignalVA.get()) +
')\n')
1326 ConfgFile.write(
'YsignalIA.set(' + str(YsignalIA.get()) +
')\n')
1327 ConfgFile.write(
'YsignalVB.set(' + str(YsignalVB.get()) +
')\n')
1328 ConfgFile.write(
'YsignalIB.set(' + str(YsignalIB.get()) +
')\n')
1329 ConfgFile.write(
'YsignalM.set(' + str(YsignalM.get()) +
')\n')
1330 ConfgFile.write(
'YsignalMX.set(' + str(YsignalMX.get()) +
')\n')
1331 ConfgFile.write(
'YsignalMY.set(' + str(YsignalMY.get()) +
')\n')
1333 ConfgFile.write(
'TimeDisp.set(' + str(TimeDisp.get()) +
')\n')
1334 ConfgFile.write(
'XYDisp.set(' + str(XYDisp.get()) +
')\n')
1335 ConfgFile.write(
'FreqDisp.set(' + str(FreqDisp.get()) +
')\n')
1336 ConfgFile.write(
'IADisp.set(' + str(IADisp.get()) +
')\n')
1337 ConfgFile.write(
'ShowC1_V.set(' + str(ShowC1_V.get()) +
')\n')
1338 ConfgFile.write(
'ShowC1_I.set(' + str(ShowC1_I.get()) +
')\n')
1339 ConfgFile.write(
'ShowC2_V.set(' + str(ShowC2_V.get()) +
')\n')
1340 ConfgFile.write(
'ShowC2_I.set(' + str(ShowC2_I.get()) +
')\n')
1341 ConfgFile.write(
'Show_MathX.set(' + str(Show_MathX.get()) +
')\n')
1342 ConfgFile.write(
'Show_MathY.set(' + str(Show_MathY.get()) +
')\n')
1343 ConfgFile.write(
'AutoCenterA.set(' + str(AutoCenterA.get()) +
')\n')
1344 ConfgFile.write(
'AutoCenterB.set(' + str(AutoCenterB.get()) +
')\n')
1345 ConfgFile.write(
'TRACEmodeTime.set(' + str(TRACEmodeTime.get()) +
')\n')
1347 ConfgFile.write(
'CHAVPosEntry.delete(0,END)\n')
1348 ConfgFile.write(
'CHAVPosEntry.insert(4, ' + CHAVPosEntry.get() +
')\n')
1349 ConfgFile.write(
'CHAIPosEntry.delete(0,END)\n')
1350 ConfgFile.write(
'CHAIPosEntry.insert(4, ' + CHAIPosEntry.get() +
')\n')
1351 ConfgFile.write(
'CHAsb.delete(0,END)\n')
1352 ConfgFile.write(
'CHAsb.insert(0, ' + CHAsb.get() +
')\n')
1353 ConfgFile.write(
'CHAIsb.delete(0,END)\n')
1354 ConfgFile.write(
'CHAIsb.insert(0, ' + CHAIsb.get() +
')\n')
1356 ConfgFile.write(
'CHBVPosEntry.delete(0,END)\n')
1357 ConfgFile.write(
'CHBVPosEntry.insert(4, ' + CHBVPosEntry.get() +
')\n')
1358 ConfgFile.write(
'CHBIPosEntry.delete(0,END)\n')
1359 ConfgFile.write(
'CHBIPosEntry.insert(4, ' + CHBIPosEntry.get() +
')\n')
1360 ConfgFile.write(
'CHBsb.delete(0,END)\n')
1361 ConfgFile.write(
'CHBsb.insert(0, ' + CHBsb.get() +
')\n')
1362 ConfgFile.write(
'CHBIsb.delete(0,END)\n')
1363 ConfgFile.write(
'CHBIsb.insert(0, ' + CHBIsb.get() +
')\n')
1365 ConfgFile.write(
'AWG_Amp_Mode.set('+ str(AWG_Amp_Mode.get()) +
')\n')
1366 ConfgFile.write(
'AWGAMode.set('+ str(AWGAMode.get()) +
')\n')
1367 ConfgFile.write(
'AWGAIOMode.set('+ str(AWGAIOMode.get()) +
')\n')
1368 ConfgFile.write(
'AWGATerm.set('+ str(AWGATerm.get()) +
')\n')
1369 ConfgFile.write(
'AWGAPhaseDelay.set('+ str(AWGAPhaseDelay.get()) +
')\n')
1370 ConfgFile.write(
'AWGAAmplEntry.delete(0,END)\n')
1371 ConfgFile.write(
'AWGAAmplEntry.insert(4, ' + AWGAAmplEntry.get() +
')\n')
1372 ConfgFile.write(
'AWGAOffsetEntry.delete(0,END)\n')
1373 ConfgFile.write(
'AWGAOffsetEntry.insert(4, ' + AWGAOffsetEntry.get() +
')\n')
1374 ConfgFile.write(
'AWGAFreqEntry.delete(0,END)\n')
1375 ConfgFile.write(
'AWGAFreqEntry.insert(4, ' + AWGAFreqEntry.get() +
')\n')
1376 ConfgFile.write(
'AWGAPhaseEntry.delete(0,END)\n')
1377 ConfgFile.write(
'AWGAPhaseEntry.insert(4, ' + AWGAPhaseEntry.get() +
')\n')
1378 ConfgFile.write(
'AWGADutyCycleEntry.delete(0,END)\n')
1379 ConfgFile.write(
'AWGADutyCycleEntry.insert(4, ' + AWGADutyCycleEntry.get() +
')\n')
1380 ConfgFile.write(
'AWGAShape.set(' + str(AWGAShape.get()) +
')\n')
1381 ConfgFile.write(
'AWGARepeatFlag.set(' + str(AWGARepeatFlag.get()) +
')\n')
1382 ConfgFile.write(
'AWGABurstFlag.set(' + str(AWGABurstFlag.get()) +
')\n')
1383 ConfgFile.write(
'global AWGACycles; AWGACycles = ' + str(AWGACycles) +
'\n')
1384 ConfgFile.write(
'global AWGABurstDelay; AWGABurstDelay = ' + str(AWGABurstDelay) +
'\n')
1386 ConfgFile.write(
'AWGBMode.set('+ str(AWGBMode.get()) +
')\n')
1387 ConfgFile.write(
'AWGBIOMode.set('+ str(AWGBIOMode.get()) +
')\n')
1388 ConfgFile.write(
'AWGBTerm.set('+ str(AWGBTerm.get()) +
')\n')
1389 ConfgFile.write(
'AWGBPhaseDelay.set('+ str(AWGBPhaseDelay.get()) +
')\n')
1390 ConfgFile.write(
'AWGBAmplEntry.delete(0,END)\n')
1391 ConfgFile.write(
'AWGBAmplEntry.insert(4, ' + AWGBAmplEntry.get() +
')\n')
1392 ConfgFile.write(
'AWGBOffsetEntry.delete(0,END)\n')
1393 ConfgFile.write(
'AWGBOffsetEntry.insert(4, ' + AWGBOffsetEntry.get() +
')\n')
1394 ConfgFile.write(
'AWGBFreqEntry.delete(0,END)\n')
1395 ConfgFile.write(
'AWGBFreqEntry.insert(4, ' + AWGBFreqEntry.get() +
')\n')
1396 ConfgFile.write(
'AWGBPhaseEntry.delete(0,END)\n')
1397 ConfgFile.write(
'AWGBPhaseEntry.insert(4, ' + AWGBPhaseEntry.get() +
')\n')
1398 ConfgFile.write(
'AWGBDutyCycleEntry.delete(0,END)\n')
1399 ConfgFile.write(
'AWGBDutyCycleEntry.insert(4, ' + AWGBDutyCycleEntry.get() +
')\n')
1400 ConfgFile.write(
'AWGBShape.set(' + str(AWGBShape.get()) +
')\n')
1401 ConfgFile.write(
'AWGBRepeatFlag.set(' + str(AWGBRepeatFlag.get()) +
')\n')
1402 ConfgFile.write(
'AWGBBurstFlag.set(' + str(AWGBBurstFlag.get()) +
')\n')
1403 ConfgFile.write(
'global AWGBCycles; AWGBCycles = ' + str(AWGBCycles) +
'\n')
1404 ConfgFile.write(
'global AWGBBurstDelay; AWGBBurstDelay = ' + str(AWGBBurstDelay) +
'\n')
1406 ConfgFile.write(
'AWGSync.set(' + str(AWGSync.get()) +
')\n')
1407 ConfgFile.write(
'AWGAMathString = "' + AWGAMathString +
'"\n')
1408 ConfgFile.write(
'AWGBMathString = "' + AWGBMathString +
'"\n')
1409 ConfgFile.write(
'AWGAcsvFile = "' + AWGAcsvFile +
'"\n')
1410 ConfgFile.write(
'AWGBcsvFile = "' + AWGBcsvFile +
'"\n')
1411 ConfgFile.write(
'AWGAwavFile = "' + AWGAwavFile +
'"\n')
1412 ConfgFile.write(
'AWGBwavFile = "' + AWGBwavFile +
'"\n')
1414 if EnableScopeOnly == 0:
1415 ConfgFile.write(
'AWGANoiseEntry.delete(0,END)\n')
1416 ConfgFile.write(
'AWGANoiseEntry.insert(4, ' + AWGBNoiseEntry.get() +
')\n')
1417 ConfgFile.write(
'AWGBNoiseEntry.delete(0,END)\n')
1418 ConfgFile.write(
'AWGBNoiseEntry.insert(4, ' + AWGBNoiseEntry.get() +
')\n')
1419 ConfgFile.write(
'AWGAsbnoise.delete(0,END)\n')
1420 ConfgFile.write(
'AWGAsbnoise.insert(4, "'+ str(AWGAsbnoise.get()) +
'")\n')
1421 ConfgFile.write(
'AWGBsbnoise.delete(0,END)\n')
1422 ConfgFile.write(
'AWGBsbnoise.insert(4, "' + str(AWGBsbnoise.get()) +
'")\n')
1424 ConfgFile.write(
'CHAVGainEntry.delete(0,END)\n')
1425 ConfgFile.write(
'CHAVGainEntry.insert(4, ' + CHAVGainEntry.get() +
')\n')
1426 ConfgFile.write(
'CHBVGainEntry.delete(0,END)\n')
1427 ConfgFile.write(
'CHBVGainEntry.insert(4, ' + CHBVGainEntry.get() +
')\n')
1428 ConfgFile.write(
'CHAVOffsetEntry.delete(0,END)\n')
1429 ConfgFile.write(
'CHAVOffsetEntry.insert(4, ' + CHAVOffsetEntry.get() +
')\n')
1430 ConfgFile.write(
'CHBVOffsetEntry.delete(0,END)\n')
1431 ConfgFile.write(
'CHBVOffsetEntry.insert(4, ' + CHBVOffsetEntry.get() +
')\n')
1433 ConfgFile.write(
'MeasDCV1.set(' + str(MeasDCV1.get()) +
')\n')
1434 ConfgFile.write(
'MeasMinV1.set(' + str(MeasMinV1.get()) +
')\n')
1435 ConfgFile.write(
'MeasMaxV1.set(' + str(MeasMaxV1.get()) +
')\n')
1436 ConfgFile.write(
'MeasBaseV1.set(' + str(MeasBaseV1.get()) +
')\n')
1437 ConfgFile.write(
'MeasTopV1.set(' + str(MeasTopV1.get()) +
')\n')
1438 ConfgFile.write(
'MeasMidV1.set(' + str(MeasMidV1.get()) +
')\n')
1439 ConfgFile.write(
'MeasPPV1.set(' + str(MeasPPV1.get()) +
')\n')
1440 ConfgFile.write(
'MeasRMSV1.set(' + str(MeasRMSV1.get()) +
')\n')
1441 ConfgFile.write(
'MeasDCI1.set(' + str(MeasDCI1.get()) +
')\n')
1442 ConfgFile.write(
'MeasMinI1.set(' + str(MeasMinI1.get()) +
')\n')
1443 ConfgFile.write(
'MeasMaxI1.set(' + str(MeasMaxI1.get()) +
')\n')
1444 ConfgFile.write(
'MeasMidI1.set(' + str(MeasMidI1.get()) +
')\n')
1445 ConfgFile.write(
'MeasPPI1.set(' + str(MeasPPI1.get()) +
')\n')
1446 ConfgFile.write(
'MeasRMSI1.set(' + str(MeasRMSI1.get()) +
')\n')
1447 ConfgFile.write(
'MeasDiffAB.set(' + str(MeasDiffAB.get()) +
')\n')
1448 ConfgFile.write(
'MeasDCV2.set(' + str(MeasDCV2.get()) +
')\n')
1449 ConfgFile.write(
'MeasMinV2.set(' + str(MeasMinV2.get()) +
')\n')
1450 ConfgFile.write(
'MeasMaxV2.set(' + str(MeasMaxV2.get()) +
')\n')
1451 ConfgFile.write(
'MeasBaseV2.set(' + str(MeasBaseV2.get()) +
')\n')
1452 ConfgFile.write(
'MeasTopV2.set(' + str(MeasTopV2.get()) +
')\n')
1453 ConfgFile.write(
'MeasMidV2.set(' + str(MeasMidV2.get()) +
')\n')
1454 ConfgFile.write(
'MeasPPV2.set(' + str(MeasPPV2.get()) +
')\n')
1455 ConfgFile.write(
'MeasRMSV2.set(' + str(MeasRMSV2.get()) +
')\n')
1456 ConfgFile.write(
'MeasDCI2.set(' + str(MeasDCI2.get()) +
')\n')
1457 ConfgFile.write(
'MeasMinI2.set(' + str(MeasMinI2.get()) +
')\n')
1458 ConfgFile.write(
'MeasMaxI2.set(' + str(MeasMaxI2.get()) +
')\n')
1459 ConfgFile.write(
'MeasMidI2.set(' + str(MeasMidI2.get()) +
')\n')
1460 ConfgFile.write(
'MeasPPI2.set(' + str(MeasPPI2.get()) +
')\n')
1461 ConfgFile.write(
'MeasRMSI2.set(' + str(MeasRMSI2.get()) +
')\n')
1462 ConfgFile.write(
'MeasDiffBA.set(' + str(MeasDiffBA.get()) +
')\n')
1464 ConfgFile.write(
'MeasAHW.set(' + str(MeasAHW.get()) +
')\n')
1465 ConfgFile.write(
'MeasALW.set(' + str(MeasALW.get()) +
')\n')
1466 ConfgFile.write(
'MeasADCy.set(' + str(MeasADCy.get()) +
')\n')
1467 ConfgFile.write(
'MeasAPER.set(' + str(MeasAPER.get()) +
')\n')
1468 ConfgFile.write(
'MeasAFREQ.set(' + str(MeasAFREQ.get()) +
')\n')
1469 ConfgFile.write(
'MeasBHW.set(' + str(MeasBHW.get()) +
')\n')
1470 ConfgFile.write(
'MeasBLW.set(' + str(MeasBLW.get()) +
')\n')
1471 ConfgFile.write(
'MeasBDCy.set(' + str(MeasBDCy.get()) +
')\n')
1472 ConfgFile.write(
'MeasBPER.set(' + str(MeasBPER.get()) +
')\n')
1473 ConfgFile.write(
'MeasBFREQ.set(' + str(MeasBFREQ.get()) +
')\n')
1474 ConfgFile.write(
'MeasPhase.set(' + str(MeasPhase.get()) +
')\n')
1475 ConfgFile.write(
'MeasDelay.set(' + str(MeasDelay.get()) +
')\n')
1477 ConfgFile.write(
'MathTrace.set(' + str(MathTrace.get()) +
')\n')
1479 ConfgFile.write(
'CHAIGainEntry.delete(0,END)\n')
1480 ConfgFile.write(
'CHAIGainEntry.insert(4, ' + CHAIGainEntry.get() +
')\n')
1481 ConfgFile.write(
'CHBIGainEntry.delete(0,END)\n')
1482 ConfgFile.write(
'CHBIGainEntry.insert(4, ' + CHBIGainEntry.get() +
')\n')
1483 ConfgFile.write(
'CHAIOffsetEntry.delete(0,END)\n')
1484 ConfgFile.write(
'CHAIOffsetEntry.insert(4, ' + CHAIOffsetEntry.get() +
')\n')
1485 ConfgFile.write(
'CHBIOffsetEntry.delete(0,END)\n')
1486 ConfgFile.write(
'CHBIOffsetEntry.insert(4, ' + CHBIOffsetEntry.get() +
')\n')
1488 ConfgFile.write(
'UserAString = "' + UserAString +
'"\n')
1489 ConfgFile.write(
'UserALabel = "' + UserALabel +
'"\n')
1490 ConfgFile.write(
'UserBString = "' + UserBString +
'"\n')
1491 ConfgFile.write(
'UserBLabel = "' + UserBLabel +
'"\n')
1492 ConfgFile.write(
'FFTUserWindowString= "' + FFTUserWindowString +
'"\n')
1493 ConfgFile.write(
'DigFilterAString = "' + DigFilterAString +
'"\n')
1494 ConfgFile.write(
'DigFilterBString = "' + DigFilterBString +
'"\n')
1497 CHA_TC1.set(float(cha_TC1Entry.get()))
1498 CHA_TC2.set(float(cha_TC2Entry.get()))
1499 CHB_TC1.set(float(chb_TC1Entry.get()))
1500 CHB_TC2.set(float(chb_TC2Entry.get()))
1501 CHA_A1.set(float(cha_A1Entry.get()))
1502 CHA_A2.set(float(cha_A2Entry.get()))
1503 CHB_A1.set(float(chb_A1Entry.get()))
1504 CHB_A2.set(float(chb_A2Entry.get()))
1507 ConfgFile.write(
'CHA_RC_HP.set(' + str(CHA_RC_HP.get()) +
')\n')
1508 ConfgFile.write(
'CHB_RC_HP.set(' + str(CHB_RC_HP.get()) +
')\n')
1509 ConfgFile.write(
'CHAI_RC_HP.set(' + str(CHAI_RC_HP.get()) +
')\n')
1510 ConfgFile.write(
'CHBI_RC_HP.set(' + str(CHBI_RC_HP.get()) +
')\n')
1511 ConfgFile.write(
'CHA_TC1.set(' + str(CHA_TC1.get()) +
')\n')
1512 ConfgFile.write(
'CHA_TC2.set(' + str(CHA_TC2.get()) +
')\n')
1513 ConfgFile.write(
'CHB_TC1.set(' + str(CHB_TC1.get()) +
')\n')
1514 ConfgFile.write(
'CHB_TC2.set(' + str(CHB_TC2.get()) +
')\n')
1515 ConfgFile.write(
'CHA_A1.set(' + str(CHA_A1.get()) +
')\n')
1516 ConfgFile.write(
'CHA_A2.set(' + str(CHA_A2.get()) +
')\n')
1517 ConfgFile.write(
'CHB_A1.set(' + str(CHB_A1.get()) +
')\n')
1518 ConfgFile.write(
'CHB_A2.set(' + str(CHB_A2.get()) +
')\n')
1519 ConfgFile.write(
'cha_TC1Entry.delete(0,END)\n')
1520 ConfgFile.write(
'cha_TC1Entry.insert(4, ' + str(CHA_TC1.get()) +
')\n')
1521 ConfgFile.write(
'cha_TC2Entry.delete(0,END)\n')
1522 ConfgFile.write(
'cha_TC2Entry.insert(4, ' + str(CHA_TC2.get()) +
')\n')
1523 ConfgFile.write(
'chb_TC1Entry.delete(0,END)\n')
1524 ConfgFile.write(
'chb_TC1Entry.insert(4, ' + str(CHB_TC1.get()) +
')\n')
1525 ConfgFile.write(
'chb_TC2Entry.delete(0,END)\n')
1526 ConfgFile.write(
'chb_TC2Entry.insert(4, ' + str(CHB_TC2.get()) +
')\n')
1527 ConfgFile.write(
'cha_A1Entry.delete(0,END)\n')
1528 ConfgFile.write(
'cha_A1Entry.insert(4, ' + str(CHA_A1.get()) +
')\n')
1529 ConfgFile.write(
'cha_A2Entry.delete(0,END)\n')
1530 ConfgFile.write(
'cha_A2Entry.insert(4, ' + str(CHA_A2.get()) +
')\n')
1531 ConfgFile.write(
'chb_A1Entry.delete(0,END)\n')
1532 ConfgFile.write(
'chb_A1Entry.insert(4, ' + str(CHB_A1.get()) +
')\n')
1533 ConfgFile.write(
'chb_A2Entry.delete(0,END)\n')
1534 ConfgFile.write(
'chb_A2Entry.insert(4, ' + str(CHB_A2.get()) +
')\n')
1537 if SpectrumScreenStatus.get() > 0
or IAScreenStatus.get() > 0
or BodeScreenStatus.get() > 0:
1538 ConfgFile.write(
'SMPfftpwrTwo.set(' + str(SMPfftpwrTwo.get()) +
')\n')
1539 ConfgFile.write(
'FFTwindow.set(' + str(FFTwindow.get()) +
')\n')
1540 ConfgFile.write(
'ZEROstuffing.set(' + str(ZEROstuffing.get()) +
')\n')
1541 ConfgFile.write(
'Vdiv.set(' + str(Vdiv.get()) +
')\n')
1543 ConfgFile.write(
'DBdivindex.set(' + str(DBdivindex.get()) +
')\n')
1544 ConfgFile.write(
'DBlevel.set(' + str(DBlevel.get()) +
')\n')
1546 ConfgFile.write(
'CutDC.set(' + str(CutDC.get()) +
')\n')
1553 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=iawindow)
1559 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=freqwindow)
1565 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=bodewindow)
1570 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=root)
1574 global TgInput, TgEdge, SingleShot, AutoLevel, SingleShotSA, ManualTrigger
1575 global root, freqwindow, awgwindow, iawindow, xywindow, win1, win2
1576 global TRIGGERentry, TMsb, Xsignal, AutoCenterA, AutoCenterB
1577 global YsignalVA, YsignalIA, YsignalVB, YsignalIB, YsignalM, YsignalMX, YsignalMY
1578 global CHAsb, CHAIsb, CHBsb, CHBIsb, HScale, FreqTraceMode
1579 global CHAsbxy, CHAIsbxy, CHBsbxy, CHBIsbxy, HoldOffentry
1580 global CHAVPosEntryxy, CHBVPosEntryxy, CHAIPosEntryxy, CHBIPosEntryxy
1581 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, MathTrace, MathXUnits, MathYUnits
1582 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry, HozPossentry
1583 global AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry, AWGADutyCycleEntry
1584 global AWGAPhaseEntry, AWGAShape, AWGATerm, AWGAMode, AWGARepeatFlag, AWGBRepeatFlag
1585 global AWGBAmplEntry, AWGBOffsetEntry, AWGBFreqEntry, AWGBDutyCycleEntry
1586 global AWGBPhaseEntry, AWGBShape, AWGBTerm, AWGBMode, AWGSync, AWGAIOMode, AWGBIOMode
1587 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
1588 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1, MeasDCI1, MeasMinI1
1589 global MeasMaxI1, MeasMidI1, MeasPPI1, MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2
1590 global MeasPPV2, MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2, MeasDiffAB, MeasDiffBA
1591 global MeasRMSV1, MeasRMSV2, MeasRMSI1, MeasRMSI2, MeasPhase, MeasDelay
1592 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ, IASource, DisplaySeries
1593 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
1594 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
1595 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, CutDC, AWG_Amp_Mode
1596 global FFTwindow, DBdivindex, DBlevel, TRACEmodeTime, TRACEaverage, Vdiv
1597 global SMPfftpwrTwo, SMPfft, StartFreqEntry, StopFreqEntry, ZEROstuffing
1598 global TimeDisp, XYDisp, FreqDisp, IADisp, AWGAPhaseDelay, AWGBPhaseDelay
1599 global RsystemEntry, ResScale, GainCorEntry, PhaseCorEntry
1600 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2
1601 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxScreenStatus, MuxEnb
1602 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry, muxwindow, ChopMuxMode, ChopTrig, DualMuxMode
1603 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
1604 global MathString, MathXString, MathYString, UserAString, UserALabel, UserBString, UserBLabel
1605 global MathAxis, MathXAxis, MathYAxis, Show_MathX, Show_MathY, MathScreenStatus, MathWindow
1606 global AWGAMathString, AWGBMathString, FFTUserWindowString, DigFilterAString, DigFilterBString
1607 global GRWF, GRHF, GRWBP, GRHBP, GRWXY, GRHXY, GRWIA, GRHIA, MeasureStatus
1608 global ChaLableSrring1, ChaLableSrring2, ChaLableSrring3, ChaLableSrring4, ChaLableSrring5, ChaLableSrring6
1609 global ChbLableSrring1, ChbLableSrring2, ChbLableSrring3, ChbLableSrring4, ChbLableSrring5, ChbLableSrring6
1610 global ChaMeasString1, ChaMeasString2, ChaMeasString3, ChaMeasString4, ChaMeasString5, ChaMeasString6
1611 global ChbMeasString1, ChbMeasString2, ChbMeasString3, ChbMeasString4, ChbMeasString5, ChbMeasString6
1612 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2, CHAI_RC_HP, CHBI_RC_HP
1613 global CHA_A1, CHA_A2, CHB_A1, CHB_A2, RelPhaseCenter, ImpedanceCenter
1614 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
1615 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
1616 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle
1617 global AWGABurstFlag, AWGACycles, AWGABurstDelay, AWGAwaveform, AWGAcsvFile, AWGBcsvFile
1618 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay, AWGBwaveform, AWGAwavFile, AWGBwavFile
1619 global SCLKPort, SDATAPort, SLATCHPort, EnableHSsampling, FminEntry, HtMulEntry
1620 global phawindow, PhAca, PhAScreenStatus, PhADisp
1621 global GRWPhA, X0LPhA, GRHPhA, Y0TPhA, EnableScopeOnly
1622 global VScale, IScale, RefphEntry, SMPfft, BoardStatus, boardwindow, BrdSel
1623 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn, RollBt, Roll_Mode
1624 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D, ScreenWidth, ScreenHeight
1625 global TRACEwidth, ColorMode, ca, COLORcanvas, COLORtrace4, COLORtraceR4, COLORtext
1626 global AWGANoiseEntry, AWGBNoiseEntry, AWGAsbnoise, AWGBsbnoise
1627 global AWGFiltA, AWGALenEntry, AWGFiltABoxCar, AWGFiltALength, digfltwindow
1628 global AWGFiltB, AWGBLenEntry, AWGFiltBBoxCar, AWGFiltBLength
1632 ConfgFile = open(filename)
1633 for line
in ConfgFile:
1635 exec( line.rstrip(), globals(), globals())
1638 print(
"Skipping " + line.rstrip())
1640 if ScreenWidth < root.winfo_x()
or ScreenHeight < root.winfo_y():
1641 root.geometry(
'+0+0')
1643 if ScreenWidth < awgwindow.winfo_x()
or ScreenHeight < awgwindow.winfo_y():
1644 awgwindow.geometry(
'+0+0')
1648 if ScreenWidth < xywindow.winfo_x()
or ScreenHeight< xywindow.winfo_y():
1649 xywindow.geometry(
'+0+0')
1653 if ScreenWidth < iawindow.winfo_x()
or ScreenHeight < iawindow.winfo_y():
1654 iawindow.geometry(
'+0+0')
1658 if ScreenWidth < freqwindow.winfo_x()
or ScreenHeight < freqwindow.winfo_y():
1659 freqwindow.geometry(
'+0+0')
1663 if ScreenWidth < win1.winfo_x()
or ScreenHeight < win1.winfo_y():
1664 win1.geometry(
'+0+0')
1668 if ScreenWidth < win2.winfo_x()
or ScreenHeight < win2.winfo_y():
1669 win2.geometry(
'+0+0')
1673 if ScreenWidth < minigenwindow.winfo_x()
or ScreenHeight < minigenwindow.winfo_y():
1674 minigenwindow.geometry(
'+0+0')
1678 if ScreenWidth < muxwindow.winfo_x()
or ScreenHeight < muxwindow.winfo_y():
1679 muxwindow.geometry(
'+0+0')
1683 if ScreenWidth < phawindow.winfo_x()
or ScreenHeight < phawindow.winfo_y():
1684 phawindow.geometry(
'+0+0')
1688 if ScreenWidth < bodewindow.winfo_x()
or ScreenHeight < bodewindow.winfo_y():
1689 bodewindow.geometry(
'+0+0')
1693 if ScreenWidth < measurewindow.winfo_x()
or ScreenHeight < measurewindow.winfo_y():
1694 measurewindow.geometry(
'+0+0')
1698 if ScreenWidth < etswindow.winfo_x()
or ScreenHeight < etswindow.winfo_y():
1699 etswindow.geometry(
'+0+0')
1702 if Roll_Mode.get() == 0:
1703 RollBt.config(style=
"RollOff.TButton",text=
"Roll-Off")
1705 RollBt.config(style=
"Roll.TButton",text=
"Roll-On")
1706 if DevID !=
"No Device":
1711 if ColorMode.get() > 0:
1713 if TRACEwidth.get() < 2:
1715 COLORtext =
"#000000"
1716 COLORtrace4 =
"#a0a000"
1717 COLORtraceR4 =
"#606000"
1718 COLORcanvas =
"#ffffff"
1721 COLORcanvas =
"#000000"
1722 COLORtrace4 =
"#ffff00"
1723 COLORtraceR4 =
"#808000"
1724 COLORtext =
"#ffffff"
1725 ca.config(background=COLORcanvas)
1727 if AWGAShape.get()==6:
1729 if AWGAShape.get()==13:
1731 if AWGBShape.get()==6:
1733 if AWGBShape.get()==13:
1736 if AWGAShape.get()==10:
1738 if AWGBShape.get()==10:
1740 if EnableScopeOnly == 0:
1758 print(
"Config File Not Found.")
1762 global AWGAShape, AWGBShape, BisCompA, AWGAShapeLabel, AWGBShapeLabel
1763 global AWGALength, AWGBLength, AWGAwaveform, AWGBwaveform, EnableScopeOnly
1765 if AWGAShape.get()==9:
1767 AWGAShapeLabel.config(text =
"Impulse")
1768 elif AWGAShape.get()==11:
1770 AWGAShapeLabel.config(text =
"Trapazoid")
1771 elif AWGAShape.get()==15:
1773 AWGAShapeLabel.config(text =
"SSQ Pulse")
1774 elif AWGAShape.get()==16:
1776 AWGAShapeLabel.config(text =
"Ramp")
1777 elif AWGAShape.get()==17:
1779 AWGAShapeLabel.config(text =
"PWN Sine")
1780 elif AWGAShape.get()==18:
1782 AWGAShapeLabel.config(text =
"Hi Res Sine")
1783 elif AWGAShape.get()==12:
1785 AWGAShapeLabel.config(text =
"Up Down Ramp")
1786 elif AWGAShape.get()==14:
1788 AWGAShapeLabel.config(text =
"Fourier Series")
1789 elif AWGAShape.get()==19:
1791 AWGAShapeLabel.config(text =
"Sinc Pulse")
1792 elif AWGAShape.get()==20:
1794 AWGAShapeLabel.config(text =
"Pulse")
1795 elif AWGAShape.get()==21:
1797 AWGAShapeLabel.config(text =
"FM Sine")
1798 elif AWGAShape.get()==22:
1800 AWGAShapeLabel.config(text =
"AM Sine")
1801 elif AWGAShape.get()==7:
1803 AWGAShapeLabel.config(text =
"UU Noise")
1804 elif AWGAShape.get()==8:
1806 AWGAShapeLabel.config(text =
"UG Noise")
1807 elif AWGAShape.get()==0:
1808 AWGAShapeLabel.config(text =
"DC")
1809 elif AWGAShape.get()==2:
1810 AWGAShapeLabel.config(text =
"Triangle")
1811 elif AWGAShape.get()==4:
1812 AWGAShapeLabel.config(text =
"Square")
1813 elif AWGAShape.get()==3:
1814 AWGAShapeLabel.config(text =
"Saw Tooth")
1815 elif AWGAShape.get()==5:
1816 AWGAShapeLabel.config(text =
"Starestep")
1817 elif AWGAShape.get()==6:
1818 AWGAShapeLabel.config(text =
"CSV File")
1819 elif AWGAShape.get()==13:
1820 AWGAShapeLabel.config(text =
"Wav File")
1821 elif AWGAShape.get()==10:
1822 AWGAShapeLabel.config(text =
"Math")
1824 AWGAShapeLabel.config(text =
"Other Shape")
1826 if BisCompA.get() == 1:
1828 if AWGBShape.get()==9:
1830 AWGBShapeLabel.config(text =
"Impulse")
1831 elif AWGBShape.get()==11:
1833 AWGBShapeLabel.config(text =
"Trapazoid")
1834 elif AWGBShape.get()==15:
1836 AWGBShapeLabel.config(text =
"SSQ Pulse")
1837 elif AWGBShape.get()==16:
1839 AWGBShapeLabel.config(text =
"Ramp")
1840 elif AWGBShape.get()==17:
1842 AWGBShapeLabel.config(text =
"PWN Sine")
1843 elif AWGBShape.get()==18:
1845 AWGBShapeLabel.config(text =
"Hi Res Sine")
1846 elif AWGBShape.get()==12:
1848 AWGBShapeLabel.config(text =
"Up Down Ramp")
1849 elif AWGBShape.get()==14:
1851 AWGBShapeLabel.config(text =
"Fourier Series")
1852 elif AWGBShape.get()==19:
1854 AWGBShapeLabel.config(text =
"Sinc Pulse")
1855 elif AWGBShape.get()==20:
1857 AWGBShapeLabel.config(text =
"Pulse")
1858 elif AWGBShape.get()==7:
1860 AWGBShapeLabel.config(text =
"UU Noise")
1861 elif AWGBShape.get()==8:
1863 AWGBShapeLabel.config(text =
"UG Noise")
1864 elif AWGBShape.get()==0:
1865 AWGBShapeLabel.config(text =
"DC")
1866 elif AWGBShape.get()==2:
1867 AWGBShapeLabel.config(text =
"Triangle")
1868 elif AWGBShape.get()==4:
1869 AWGBShapeLabel.config(text =
"Square")
1870 elif AWGBShape.get()==3:
1871 AWGBShapeLabel.config(text =
"Saw Tooth")
1872 elif AWGBShape.get()==5:
1873 AWGBShapeLabel.config(text =
"Starestep")
1874 elif AWGBShape.get()==6:
1875 AWGBShapeLabel.config(text =
"CSV File")
1876 elif AWGBShape.get()==13:
1877 AWGBShapeLabel.config(text =
"Wav File")
1878 elif AWGBShape.get()==10:
1879 AWGBShapeLabel.config(text =
"Math")
1881 AWGBShapeLabel.config(text =
"Other Shape")
1882 if EnableScopeOnly == 0:
1883 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
1884 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
1891 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=iawindow)
1897 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=freqwindow)
1903 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=bodewindow)
1909 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=root)
1914 global VBuffA, VBuffB, IBuffA, IBuffB, VFilterA, VFilterB
1915 global VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGAwaveform, AWGBwaveform
1916 global TgInput, TgEdge, SingleShot, AutoLevel, SingleShotSA, ManualTrigger
1917 global root, freqwindow, awgwindow, iawindow, xywindow, win1, win2
1918 global TRIGGERentry, TMsb, Xsignal, AutoCenterA, AutoCenterB
1919 global YsignalVA, YsignalIA, YsignalVB, YsignalIB, YsignalM, YsignalMX, YsignalMY
1920 global CHAsb, CHAIsb, CHBsb, CHBIsb, HScale, FreqTraceMode
1921 global CHAsbxy, CHAIsbxy, CHBsbxy, CHBIsbxy, HoldOffentry
1922 global CHAVPosEntryxy, CHBVPosEntryxy, CHAIPosEntryxy, CHBIPosEntryxy
1923 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, MathTrace, MathXUnits, MathYUnits
1924 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry, HozPossentry
1925 global AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry, AWGADutyCycleEntry
1926 global AWGAPhaseEntry, AWGAShape, AWGATerm, AWGAMode, AWGARepeatFlag, AWGBRepeatFlag
1927 global AWGBAmplEntry, AWGBOffsetEntry, AWGBFreqEntry, AWGBDutyCycleEntry
1928 global AWGBPhaseEntry, AWGBShape, AWGBTerm, AWGBMode, AWGSync, AWGAIOMode, AWGBIOMode
1929 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
1930 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1, MeasDCI1, MeasMinI1
1931 global MeasMaxI1, MeasMidI1, MeasPPI1, MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2
1932 global MeasPPV2, MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2, MeasDiffAB, MeasDiffBA
1933 global MeasRMSV1, MeasRMSV2, MeasRMSI1, MeasRMSI2, MeasPhase, MeasDelay
1934 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ, IASource, DisplaySeries
1935 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
1936 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
1937 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, CutDC, AWG_Amp_Mode
1938 global FFTwindow, DBdivindex, DBlevel, TRACEmodeTime, TRACEaverage, Vdiv
1939 global SMPfftpwrTwo, SMPfft, StartFreqEntry, StopFreqEntry, ZEROstuffing
1940 global TimeDisp, XYDisp, FreqDisp, IADisp, AWGAPhaseDelay, AWGBPhaseDelay
1941 global RsystemEntry, ResScale, GainCorEntry, PhaseCorEntry
1942 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2
1943 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxScreenStatus, MuxEnb
1944 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry, muxwindow, ChopMuxMode, ChopTrig, DualMuxMode
1945 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
1946 global MathString, MathXString, MathYString, UserAString, UserALabel, UserBString, UserBLabel
1947 global MathAxis, MathXAxis, MathYAxis, Show_MathX, Show_MathY, MathScreenStatus, MathWindow
1948 global AWGAMathString, AWGBMathString, FFTUserWindowString, DigFilterAString, DigFilterBString
1949 global GRWF, GRHF, GRWBP, GRHBP, GRWXY, GRHXY, GRWIA, GRHIA, MeasureStatus
1950 global ChaLableSrring1, ChaLableSrring2, ChaLableSrring3, ChaLableSrring4, ChaLableSrring5, ChaLableSrring6
1951 global ChbLableSrring1, ChbLableSrring2, ChbLableSrring3, ChbLableSrring4, ChbLableSrring5, ChbLableSrring6
1952 global ChaMeasString1, ChaMeasString2, ChaMeasString3, ChaMeasString4, ChaMeasString5, ChaMeasString6
1953 global ChbMeasString1, ChbMeasString2, ChbMeasString3, ChbMeasString4, ChbMeasString5, ChbMeasString6
1954 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2, CHAI_RC_HP, CHBI_RC_HP
1955 global CHA_A1, CHA_A2, CHB_A1, CHB_A2, RelPhaseCenter, ImpedanceCenter
1956 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
1957 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
1958 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle
1959 global AWGABurstFlag, AWGACycles, AWGABurstDelay, AWGAwaveform, AWGAcsvFile, AWGBcsvFile
1960 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay, AWGBwaveform, AWGAwavFile, AWGBwavFile
1961 global SCLKPort, SDATAPort, SLATCHPort, EnableHSsampling, FminEntry, HtMulEntry
1962 global phawindow, PhAca, PhAScreenStatus, PhADisp
1963 global GRWPhA, X0LPhA, GRHPhA, Y0TPhA, EnableScopeOnly
1964 global VScale, IScale, RefphEntry, SMPfft, BoardStatus, boardwindow, BrdSel
1965 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn, RollBt, Roll_Mode
1966 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D, ScreenWidth, ScreenHeight
1967 global TRACEwidth, ColorMode, ca, COLORcanvas, COLORtrace4, COLORtraceR4, COLORtext
1968 global AWGANoiseEntry, AWGBNoiseEntry, AWGAsbnoise, AWGBsbnoise
1969 global AWGFiltA, AWGALenEntry, AWGFiltABoxCar, AWGFiltALength, digfltwindow
1970 global AWGFiltB, AWGBLenEntry, AWGFiltBBoxCar, AWGFiltBLength
1971 global DFiltACoef, DFiltBCoef, AWGACoef, AWGBCoef
1973 filename = askopenfilename(defaultextension =
".txt", filetypes=[(
"Script files",
"*.txt")], parent=root)
1976 ConfgFile = open(filename)
1977 for line
in ConfgFile:
1979 exec( line.rstrip(), globals(), globals())
1982 print(
"Skipping " + line.rstrip())
1983 showwarning(
"Syntax Error!",(
"Syntax Error found in line:\n " + line.rstrip()))
1986 print(
"Config File Not Found.")
1987 showwarning(
"Warning!",
"Script File Not Found.")
1991 global COLORtext, COLORcanvas, ColorMode, Bodeca, BodeScreenStatus, PhAca, PhAScreenStatus
1992 global ca, Freqca, SpectrumScreenStatus, XYca, XYScreenStatus, IAca, IAScreenStatus
1993 global COLORtrace4, COLORtraceR4, TRACEwidth
1995 if ColorMode.get() > 0:
1996 if TRACEwidth.get() < 2:
1998 COLORtext =
"#000000"
1999 COLORtrace4 =
"#a0a000"
2000 COLORtraceR4 =
"#606000"
2001 COLORcanvas =
"#ffffff"
2003 COLORcanvas =
"#000000"
2004 COLORtrace4 =
"#ffff00"
2005 COLORtraceR4 =
"#808000"
2006 COLORtext =
"#ffffff"
2007 ca.config(background=COLORcanvas)
2009 if SpectrumScreenStatus.get() > 0:
2010 Freqca.config(background=COLORcanvas)
2012 if XYScreenStatus.get() > 0:
2013 XYca.config(background=COLORcanvas)
2015 if PhAScreenStatus.get() > 0:
2016 PhAca.config(background=COLORcanvas)
2018 if IAScreenStatus.get() > 0:
2019 IAca.config(background=COLORcanvas)
2021 if BodeScreenStatus.get() > 0:
2022 Bodeca.config(background=COLORcanvas)
2026 global CANVASwidth, CANVASheight
2027 global COLORtext, MarkerNum, ColorMode
2029 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")])
2030 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n")
2031 if MarkerNum > 0
or ColorMode.get() > 0:
2032 ca.postscript(file=filename, height=CANVASheight, width=CANVASwidth, colormode=
'color', rotate=Orient)
2034 COLORtext =
"#000000"
2037 ca.postscript(file=filename, height=CANVASheight, width=CANVASwidth, colormode=
'color', rotate=Orient)
2041 COLORtext =
"#ffffff"
2045 global CANVASwidthXY, CANVASheightXY, xywindow
2046 global COLORtext, MarkerNum, ColorMode, XYca
2048 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent=xywindow)
2049 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=xywindow)
2050 if MarkerNum > 0
or ColorMode.get() > 0:
2051 XYca.postscript(file=filename, height=CANVASheightXY, width=CANVASwidthXY, colormode=
'color', rotate=Orient)
2053 COLORtext =
"#000000"
2056 XYca.postscript(file=filename, height=CANVASheightXY, width=CANVASwidthXY, colormode=
'color', rotate=Orient)
2060 COLORtext =
"#ffffff"
2064 global CANVASwidthIA, CANVASheightIA
2065 global COLORtext, IAca, ColorMode, iawindow
2067 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent=iawindow)
2068 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=iawindow)
2069 if ColorMode.get() > 0:
2070 IAca.postscript(file=filename, height=CANVASheightIA, width=CANVASwidthIA, colormode=
'color', rotate=Orient)
2072 COLORtext =
"#000000"
2075 IAca.postscript(file=filename, height=CANVASheightIA, width=CANVASwidthIA, colormode=
'color', rotate=Orient)
2077 COLORtext =
"#ffffff"
2081 global CANVASwidthBP, CANVASheightBP
2082 global COLORtext, Bodeca, bodewindow
2084 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent = bodewindow)
2085 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=bodewindow)
2086 if MarkerNum > 0
or ColorMode.get() > 0:
2087 Bodeca.postscript(file=filename, height=CANVASheightBP, width=CANVASwidthBP, colormode=
'color', rotate=Orient)
2089 COLORtext =
"#000000"
2092 Bodeca.postscript(file=filename, height=CANVASheightBP, width=CANVASwidthBP, colormode=
'color', rotate=Orient)
2094 COLORtext =
"#ffffff"
2098 global VBuffA, VBuffB, IBuffA, IBuffB, SAMPLErate
2101 filename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"Comma Separated Values",
"*.csv")])
2102 DataFile = open(filename,
'w')
2103 DataFile.write(
'Sample-#, CA-V, CA-I, CB-V, CB-I \n' )
2104 for index
in range(len(VBuffA)):
2105 TimePnt = float((index+0.0)/SAMPLErate)
2106 DataFile.write( str(TimePnt) +
', ' + str(VBuffA[index]) +
', ' + str(IBuffA[index]) +
', '
2107 + str(VBuffB[index]) +
', ' + str(IBuffB[index]) +
'\n')
2111 global SAMPLErate, VBuffMA, VBuffMB, VBuffMC, VBuffMD
2113 filename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"Comma Separated Values",
"*.csv")])
2114 DataFile = open(filename,
'w')
2115 DataFile.write(
'Sample-#, MuxA, MuxB, MuxC, MuxD \n' )
2117 for index
in range(len(VBuffMA)):
2118 TimePnt = float((index+0.0)/SAMPLErate)
2119 DataFile.write( str(TimePnt) +
', ' + str(VBuffMA[index]) +
', ' + str(VBuffMB[index]) +
', '
2120 + str(VBuffMC[index]) +
', ' + str(VBuffMD[index]) +
'\n')
2125 global SAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB, VBuffMA, VBuffMB, VBuffMC, VBuffMD
2128 Channel = askstring(
"Choose Channel",
"CA-V, CB-V, CA-I, CB-I\n MuxA, MuxB, MuxC, MuxD \n Channel:\n", initialvalue=
"CA-V")
2129 if (Channel ==
None):
2132 filename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"Comma Separated Values",
"*.csv")])
2133 DataFile = open(filename,
'w')
2134 if Channel ==
"CA-V":
2135 DataFile.write(
'Sample-#, CA-V\n' )
2136 for index
in range(len(VBuffA)):
2137 TimePnt = float((index+0.0)/SAMPLErate)
2138 DataFile.write( str(TimePnt) +
', ' + str(VBuffA[index]) +
'\n')
2139 elif Channel ==
"CA-I":
2140 DataFile.write(
'Sample-#, CA-I,\n' )
2141 for index
in range(len(IBuffA)):
2142 TimePnt = float((index+0.0)/SAMPLErate)
2143 DataFile.write( str(TimePnt) +
', ' + str(IBuffA[index]) +
'\n')
2144 elif Channel ==
"CB-V":
2145 DataFile.write(
'Sample-#, CB-V\n' )
2146 for index
in range(len(VBuffB)):
2147 TimePnt = float((index+0.0)/SAMPLErate)
2148 DataFile.write( str(TimePnt) +
', ' + str(VBuffB[index]) +
'\n')
2149 elif Channel ==
"CB-I":
2150 DataFile.write(
'Sample-#, CB-I,\n' )
2151 for index
in range(len(IBuffB)):
2152 TimePnt = float((index+0.0)/SAMPLErate)
2153 DataFile.write( str(TimePnt) +
', ' + str(IBuffB[index]) +
'\n')
2154 elif Channel ==
"MuxA":
2155 DataFile.write(
'Sample-#, MuxA\n' )
2156 for index
in range(len(VBuffMA)):
2157 TimePnt = float((index+0.0)/SAMPLErate)
2158 DataFile.write( str(TimePnt) +
', ' + str(VBuffMA[index]) +
'\n')
2159 elif Channel ==
"MuxB":
2160 DataFile.write(
'Sample-#, MuxB\n' )
2161 for index
in range(len(VBuffMB)):
2162 TimePnt = float((index+0.0)/SAMPLErate)
2163 DataFile.write( str(TimePnt) +
', ' + str(VBuffMB[index]) +
'\n')
2164 elif Channel ==
"MuxC":
2165 DataFile.write(
'Sample-#, MuxC\n' )
2166 for index
in range(len(VBuffMC)):
2167 TimePnt = float((index+0.0)/SAMPLErate)
2168 DataFile.write( str(TimePnt) +
', ' + str(VBuffMC[index]) +
'\n')
2169 elif Channel ==
"MuxD":
2170 DataFile.write(
'Sample-#, MuxD\n' )
2171 for index
in range(len(VBuffMD)):
2172 TimePnt = float((index+0.0)/SAMPLErate)
2173 DataFile.write( str(TimePnt) +
', ' + str(VBuffMD[index]) +
'\n')
2177 global VBuffA, VBuffB, IBuffA, IBuffB, SHOWsamples
2180 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")])
2182 CSVFile = open(filename)
2183 dialect = csv.Sniffer().sniff(CSVFile.read(2048))
2185 csv_f = csv.reader(CSVFile, dialect)
2193 VBuffA.append(float(row[1]))
2194 IBuffA.append(float(row[2]))
2195 VBuffB.append(float(row[3]))
2196 IBuffB.append(float(row[4]))
2197 SHOWsamples = SHOWsamples + 1
2199 print(
'skipping non-numeric row')
2200 VBuffA = numpy.array(VBuffA)
2201 IBuffA = numpy.array(IBuffA)
2202 VBuffB = numpy.array(VBuffB)
2203 IBuffB = numpy.array(IBuffB)
2207 showwarning(
"WARNING",
"No such file found or wrong format!")
2212 url =
"https://wiki.analog.com/university/tools/m1k/alice/desk-top-users-guide"
2213 webbrowser.open(url,new=2)
2216 global RevDate, SWRev, FWRevOne, HWRevOne, DevID, Version_url
2219 if sys.version_info[0] == 2:
2220 u = urllib2.urlopen(Version_url)
2221 if sys.version_info[0] == 3:
2222 u = urllib.request.urlopen(Version_url)
2224 time_string = str(meta.getheaders(
"Last-Modified"))
2226 time_string =
"Unavailable"
2227 showinfo(
"About ALICE",
"ALICE DeskTop" + SWRev + RevDate +
"\n" +
2228 "Last Released Version: " + time_string[7:18] +
"\n" +
2229 "ADALM1000 Hardware Rev " + str(HWRevOne) +
"\n" +
2230 "Firmware Rev " + str(FWRevOne) +
"\n" +
2231 "Board Serial Number " + DevID +
"\n" +
2232 "Software is provided as is without any Warranty")
2236 global T1Vline, T2Vline, T1Iline, T2Iline
2237 global Tmathline, TMRline, TXYRline
2238 global T1VRline, T2VRline, T1IRline, T2IRline, TMCVline, TMDVline
2239 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, ShowMath, MathTrace
2240 global MuxScreenStatus, TMARline, TMBRline, TMCRline, TMDRline
2241 global TMAVline, TMBVline, TMCVline, TMDVline
2242 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxEnb
2243 global ShowRMA, ShowRMB, ShowRMC, ShowRMD
2245 if ShowC1_V.get() == 1:
2247 if ShowC2_V.get() == 1:
2249 if ShowC1_I.get() == 1:
2251 if ShowC2_I.get() == 1:
2253 if MathTrace.get() > 0:
2255 if MuxScreenStatus.get() > 0:
2256 if Show_CBA.get() > 0:
2258 if Show_CBB.get() > 0:
2260 if Show_CBC.get() > 0:
2262 if Show_CBD.get() > 0:
2267 global XYlineVA, XYlineIA, XYlineVB, XYlineIB, XYlineM, XYlineMX, XYlineMY
2268 global XYRlineVA, XYRlineIA, XYRlineVB, XYRlineIB, XYRlineM, XYRlineMX, XYRlineMY
2270 if len(XYlineVA) > 4:
2271 XYRlineVA = XYlineVA
2272 if len(XYlineVB) > 4:
2273 XYRlineVB = XYlineVB
2274 if len(XYlineIA) > 4:
2275 XYRlineIA = XYlineIA
2276 if len(XYlineIB) > 4:
2277 XYRlineIB = XYlineIB
2278 if len(XYlineM) > 4:
2280 if len(XYlineMX) > 4:
2281 XYRlineMX = XYlineMX
2282 if len(XYlineMY) > 4:
2283 XYRlineMY = XYlineMY
2287 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
2288 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
2290 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
2291 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
2292 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
2293 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
2295 devidstr = DevID[17:31]
2296 filename = devidstr +
"_O.cal"
2297 CalFile = open(filename,
"w")
2299 CalFile.write(
'CHAVGainEntry.delete(0,END)\n')
2300 CalFile.write(
'CHAVGainEntry.insert(4, ' + CHAVGainEntry.get() +
')\n')
2301 CalFile.write(
'CHBVGainEntry.delete(0,END)\n')
2302 CalFile.write(
'CHBVGainEntry.insert(4, ' + CHBVGainEntry.get() +
')\n')
2303 CalFile.write(
'CHAVOffsetEntry.delete(0,END)\n')
2304 CalFile.write(
'CHAVOffsetEntry.insert(4, ' + CHAVOffsetEntry.get() +
')\n')
2305 CalFile.write(
'CHBVOffsetEntry.delete(0,END)\n')
2306 CalFile.write(
'CHBVOffsetEntry.insert(4, ' + CHBVOffsetEntry.get() +
')\n')
2308 CalFile.write(
'CHAIGainEntry.delete(0,END)\n')
2309 CalFile.write(
'CHAIGainEntry.insert(4, ' + CHAIGainEntry.get() +
')\n')
2310 CalFile.write(
'CHBIGainEntry.delete(0,END)\n')
2311 CalFile.write(
'CHBIGainEntry.insert(4, ' + CHBIGainEntry.get() +
')\n')
2312 CalFile.write(
'CHAIOffsetEntry.delete(0,END)\n')
2313 CalFile.write(
'CHAIOffsetEntry.insert(4, ' + CHAIOffsetEntry.get() +
')\n')
2314 CalFile.write(
'CHBIOffsetEntry.delete(0,END)\n')
2315 CalFile.write(
'CHBIOffsetEntry.insert(4, ' + CHBIOffsetEntry.get() +
')\n')
2319 CHA_TC1.set(float(cha_TC1Entry.get()))
2320 CHA_TC2.set(float(cha_TC2Entry.get()))
2321 CHB_TC1.set(float(chb_TC1Entry.get()))
2322 CHB_TC2.set(float(chb_TC2Entry.get()))
2323 CHA_A1.set(float(cha_A1Entry.get()))
2324 CHA_A2.set(float(cha_A2Entry.get()))
2325 CHB_A1.set(float(chb_A1Entry.get()))
2326 CHB_A2.set(float(chb_A2Entry.get()))
2329 CalFile.write(
'CHA_RC_HP.set(' + str(CHA_RC_HP.get()) +
')\n')
2330 CalFile.write(
'CHB_RC_HP.set(' + str(CHB_RC_HP.get()) +
')\n')
2331 CalFile.write(
'CHA_TC1.set(' + str(CHA_TC1.get()) +
')\n')
2332 CalFile.write(
'CHA_TC2.set(' + str(CHA_TC2.get()) +
')\n')
2333 CalFile.write(
'CHB_TC1.set(' + str(CHB_TC1.get()) +
')\n')
2334 CalFile.write(
'CHB_TC2.set(' + str(CHB_TC2.get()) +
')\n')
2335 CalFile.write(
'CHA_A1.set(' + str(CHA_A1.get()) +
')\n')
2336 CalFile.write(
'CHA_A2.set(' + str(CHA_A2.get()) +
')\n')
2337 CalFile.write(
'CHB_A1.set(' + str(CHB_A1.get()) +
')\n')
2338 CalFile.write(
'CHB_A2.set(' + str(CHB_A2.get()) +
')\n')
2339 CalFile.write(
'cha_TC1Entry.delete(0,END)\n')
2340 CalFile.write(
'cha_TC1Entry.insert(4, ' + str(CHA_TC1.get()) +
')\n')
2341 CalFile.write(
'cha_TC2Entry.delete(0,END)\n')
2342 CalFile.write(
'cha_TC2Entry.insert(4, ' + str(CHA_TC2.get()) +
')\n')
2343 CalFile.write(
'chb_TC1Entry.delete(0,END)\n')
2344 CalFile.write(
'chb_TC1Entry.insert(4, ' + str(CHB_TC1.get()) +
')\n')
2345 CalFile.write(
'chb_TC2Entry.delete(0,END)\n')
2346 CalFile.write(
'chb_TC2Entry.insert(4, ' + str(CHB_TC2.get()) +
')\n')
2347 CalFile.write(
'cha_A1Entry.delete(0,END)\n')
2348 CalFile.write(
'cha_A1Entry.insert(4, ' + str(CHA_A1.get()) +
')\n')
2349 CalFile.write(
'cha_A2Entry.delete(0,END)\n')
2350 CalFile.write(
'cha_A2Entry.insert(4, ' + str(CHA_A2.get()) +
')\n')
2351 CalFile.write(
'chb_A1Entry.delete(0,END)\n')
2352 CalFile.write(
'chb_A1Entry.insert(4, ' + str(CHB_A1.get()) +
')\n')
2353 CalFile.write(
'chb_A2Entry.delete(0,END)\n')
2354 CalFile.write(
'chb_A2Entry.insert(4, ' + str(CHB_A2.get()) +
')\n')
2359 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
2360 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
2362 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
2363 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
2364 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
2365 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
2367 devidstr = DevID[17:31]
2368 filename = devidstr +
"_O.cal"
2370 CalFile = open(filename)
2371 for line
in CalFile:
2372 exec( line.rstrip() )
2375 print(
"Cal file for this device not found")
2378 global UserAString, UserALabel, MeasUserA
2380 TempString = UserALabel
2381 UserALabel = askstring(
"Measurement Label",
"Current Label: " + UserALabel +
"\n\nNew Label:\n", initialvalue=UserALabel)
2382 if (UserALabel ==
None):
2384 UserALabel = TempString
2386 TempString = UserAString
2387 UserAString = askstring(
"Measurement Formula",
"Current Formula: " + UserAString +
"\n\nNew Formula:\n", initialvalue=UserAString)
2388 if (UserAString ==
None):
2390 UserAString = TempString
2395 global UserBString, UserBLabel, MeasUserB
2397 TempString = UserBLabel
2398 UserBLabel = askstring(
"Measurement Label",
"Current Label: " + UserBLabel +
"\n\nNew Label:\n", initialvalue=UserBLabel)
2399 if (UserBLabel ==
None):
2401 UserBLabel = TempString
2403 TempString = UserBString
2404 UserBString = askstring(
"Measurement Formula",
"Current Formula: " + UserBString +
"\n\nNew Formula:\n", initialvalue=UserBString)
2405 if (UserBString ==
None):
2407 UserBString = TempString
2413 global LabelPlotText, PlotLabelText
2415 TempString = PlotLabelText
2416 PlotLabelText = askstring(
"Custom Label",
"Current Plot Label: " + PlotLabelText +
"\n\nNew Label:\n", initialvalue=PlotLabelText)
2417 if (PlotLabelText ==
None):
2418 LabelPlotText.set(0)
2419 PlotLabelText = TempString
2421 LabelPlotText.set(1)
2424 global RUNstatus, MathScreenStatus, MathWindow, SWRev, RevDate
2425 global MathString, MathUnits, MathXString, MathXUnits, MathYString, MathYUnits
2426 global MathAxis, MathXAxis, MathYAxis, MathTrace
2427 global formentry, unitsentry, axisentry, xformentry, xunitsentry, xaxisentry, yformentry, yunitsentry, yaxisentry
2428 global formlab, xformlab, yformlab, FrameBG
2429 global Mframe1, Mframe2, Mframe3, Mframe4
2431 if MathScreenStatus.get() == 0:
2432 MathScreenStatus.set(1)
2434 MathWindow = Toplevel()
2435 MathWindow.title(
"Math Formula " + SWRev + RevDate)
2436 MathWindow.resizable(FALSE,FALSE)
2437 MathWindow.protocol(
"WM_DELETE_WINDOW", DestroyMathScreen)
2438 MathWindow.configure(background=FrameBG)
2439 Mframe1 = LabelFrame(MathWindow, text=
"Built-in Exp", style=
"A10T5.TLabelframe")
2440 Mframe2 = LabelFrame(MathWindow, text=
"Math Trace", style=
"A10T5.TLabelframe")
2441 Mframe3 = LabelFrame(MathWindow, text=
"X Math Trace", style=
"A10T6.TLabelframe")
2442 Mframe4 = LabelFrame(MathWindow, text=
"Y Math Trace", style=
"A10T7.TLabelframe")
2445 Mframe1.grid(row = 0, column=0, rowspan=3, sticky=W)
2446 Mframe2.grid(row = 0, column=1, sticky=W)
2447 Mframe3.grid(row = 1, column=1, sticky=W)
2448 Mframe4.grid(row = 2, column=1, sticky=W)
2452 mrb1 = Radiobutton(Mframe1, text=
'none', variable=MathTrace, value=0, command=UpdateTimeTrace)
2453 mrb1.grid(row=0, column=0, sticky=W)
2454 mrb2 = Radiobutton(Mframe1, text=
'CAV+CBV', variable=MathTrace, value=1, command=UpdateTimeTrace)
2455 mrb2.grid(row=1, column=0, sticky=W)
2456 mrb3 = Radiobutton(Mframe1, text=
'CAV-CBV', variable=MathTrace, value=2, command=UpdateTimeTrace)
2457 mrb3.grid(row=2, column=0, sticky=W)
2458 mrb4 = Radiobutton(Mframe1, text=
'CBV-CAV', variable=MathTrace, value=3, command=UpdateTimeTrace)
2459 mrb4.grid(row=3, column=0, sticky=W)
2460 mrb5 = Radiobutton(Mframe1, text=
'CAI-CBI', variable=MathTrace, value=8, command=UpdateTimeTrace)
2461 mrb5.grid(row=4, column=0, sticky=W)
2462 mrb6 = Radiobutton(Mframe1, text=
'CBI-CAI', variable=MathTrace, value=9, command=UpdateTimeTrace)
2463 mrb6.grid(row=5, column=0, sticky=W)
2464 mrb7 = Radiobutton(Mframe1, text=
'CAV*CAI', variable=MathTrace, value=4, command=UpdateTimeTrace)
2465 mrb7.grid(row=6, column=0, sticky=W)
2466 mrb8 = Radiobutton(Mframe1, text=
'CBV*CBI', variable=MathTrace, value=5, command=UpdateTimeTrace)
2467 mrb8.grid(row=7, column=0, sticky=W)
2468 mrb9 = Radiobutton(Mframe1, text=
'CAV/CAI', variable=MathTrace, value=6, command=UpdateTimeTrace)
2469 mrb9.grid(row=8, column=0, sticky=W)
2470 mrb10 = Radiobutton(Mframe1, text=
'CBV/CBI', variable=MathTrace, value=7, command=UpdateTimeTrace)
2471 mrb10.grid(row=9, column=0, sticky=W)
2472 mrb11 = Radiobutton(Mframe1, text=
'CBV/CAV', variable=MathTrace, value=10, command=UpdateTimeTrace)
2473 mrb11.grid(row=10, column=0, sticky=W)
2474 mrb12 = Radiobutton(Mframe1, text=
'CBI/CAI', variable=MathTrace, value=11, command=UpdateTimeTrace)
2475 mrb12.grid(row=11, column=0, sticky=W)
2476 mrb13 = Radiobutton(Mframe1, text=
'Formula', variable=MathTrace, value=12, command=UpdateTimeTrace)
2477 mrb13.grid(row=12, column=0, sticky=W)
2481 sframe2a = Frame( Mframe2 )
2482 sframe2a.pack(side=TOP)
2483 formlab = Label(sframe2a, text=
" Formula ", style=
"A10B.TLabel")
2484 formlab.pack(side=LEFT)
2485 formentry = Entry(sframe2a, width=23)
2486 formentry.pack(side=LEFT)
2487 formentry.delete(0,
"end")
2488 formentry.insert(0,MathString)
2489 sframe2b = Frame( Mframe2 )
2490 sframe2b.pack(side=TOP)
2491 unitslab = Label(sframe2b, text=
"Units ", style=
"A10B.TLabel")
2492 unitslab.pack(side=LEFT)
2493 unitsentry = Entry(sframe2b, width=6)
2494 unitsentry.pack(side=LEFT)
2495 unitsentry.delete(0,
"end")
2496 unitsentry.insert(0,MathUnits)
2497 checkbt = Button(sframe2b, text=
"Check", command=CheckMathString )
2498 checkbt.pack(side=LEFT)
2499 sframe2c = Frame( Mframe2 )
2500 sframe2c.pack(side=TOP)
2501 axislab = Label(sframe2c, text=
"Axis ", style=
"A10B.TLabel")
2502 axislab.pack(side=LEFT)
2503 axisentry = Entry(sframe2c, width=4)
2504 axisentry.pack(side=LEFT)
2505 axisentry.delete(0,
"end")
2506 axisentry.insert(0,MathAxis)
2507 applybt = Button(sframe2c, text=
"Apply", command=ApplyMathString )
2508 applybt.pack(side=LEFT)
2512 sframe3a = Frame( Mframe3 )
2513 sframe3a.pack(side=TOP)
2514 xformlab = Label(sframe3a, text=
"X Formula ", style=
"A10B.TLabel")
2515 xformlab.pack(side=LEFT)
2516 xformentry = Entry(sframe3a, width=23)
2517 xformentry.pack(side=LEFT)
2518 xformentry.delete(0,
"end")
2519 xformentry.insert(0, MathXString)
2520 sframe3b = Frame( Mframe3 )
2521 sframe3b.pack(side=TOP)
2522 xunitslab = Label(sframe3b, text=
"X Units ", style=
"A10B.TLabel")
2523 xunitslab.pack(side=LEFT)
2524 xunitsentry = Entry(sframe3b, width=6)
2525 xunitsentry.pack(side=LEFT)
2526 xunitsentry.delete(0,
"end")
2527 xunitsentry.insert(0, MathXUnits)
2528 xcheckbt = Button(sframe3b, text=
"Check", command=CheckMathXString )
2529 xcheckbt.pack(side=LEFT)
2530 sframe3c = Frame( Mframe3 )
2531 sframe3c.pack(side=TOP)
2532 xaxislab = Label(sframe3c, text=
"X Axis ", style=
"A10B.TLabel")
2533 xaxislab.pack(side=LEFT)
2534 xaxisentry = Entry(sframe3c, width=4)
2535 xaxisentry.pack(side=LEFT)
2536 xaxisentry.delete(0,
"end")
2537 xaxisentry.insert(0, MathXAxis)
2538 xapplybt = Button(sframe3c, text=
"Apply", command=ApplyMathXString )
2539 xapplybt.pack(side=LEFT)
2543 sframe4a = Frame( Mframe4 )
2544 sframe4a.pack(side=TOP)
2545 yformlab = Label(sframe4a, text=
"Y Formula ", style=
"A10B.TLabel")
2546 yformlab.pack(side=LEFT)
2547 yformentry = Entry(sframe4a, width=23)
2548 yformentry.pack(side=LEFT)
2549 yformentry.delete(0,
"end")
2550 yformentry.insert(0,MathYString)
2551 sframe4b = Frame( Mframe4 )
2552 sframe4b.pack(side=TOP)
2553 yunitslab = Label(sframe4b, text=
"Y Units ", style=
"A10B.TLabel")
2554 yunitslab.pack(side=LEFT)
2555 yunitsentry = Entry(sframe4b, width=6)
2556 yunitsentry.pack(side=LEFT)
2557 yunitsentry.delete(0,
"end")
2558 yunitsentry.insert(0,MathYUnits)
2559 ycheckbt = Button(sframe4b, text=
"Check", command=CheckMathYString )
2560 ycheckbt.pack(side=LEFT)
2561 sframe4c = Frame( Mframe4 )
2562 sframe4c.pack(side=TOP)
2563 yaxislab = Label(sframe4c, text=
"Y Axis ", style=
"A10B.TLabel")
2564 yaxislab.pack(side=LEFT)
2565 yaxisentry = Entry(sframe4c, width=4)
2566 yaxisentry.pack(side=LEFT)
2567 yaxisentry.delete(0,
"end")
2568 yaxisentry.insert(0,MathYAxis)
2569 yapplybt = Button(sframe4c, text=
"Apply", command=ApplyMathYString )
2570 yapplybt.pack(side=LEFT)
2572 dismissbutton = Button(MathWindow, text=
"Dismiss", command=DestroyMathScreen)
2573 dismissbutton.grid(row=3, column=0, sticky=W)
2575 if RUNstatus.get() > 0:
2579 global MathScreenStatus, MathWindow
2581 if MathScreenStatus.get() == 1:
2582 MathScreenStatus.set(0)
2583 MathWindow.destroy()
2586 global MathString, formentry, MathUnits, unitsentry, MathAxis, axisentry, formlab
2587 global VBuffA, VBuffB, IBuffA, IBuffB
2588 global VBuffMA, VBuffMB, VBuffMC, VBuffMD
2589 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
2590 global FFTBuffA, FFTBuffB, FFTwindowshape
2591 global AWGAwaveform, AWGBwaveform
2592 global Show_MathX, Show_MathY
2593 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
2594 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
2597 TempString = formentry.get()
2599 MathResult = eval(TempString)
2600 formlab.configure(text=
"Formula ", style=
"A10G.TLabel")
2602 formlab.configure(text=
"Formula ", style=
"A10R.TLabel")
2605 global MathXString, xformentry, MathXUnits, xunitsentry, MathXAxis, xaxisentry, xformlab
2606 global VBuffA, VBuffB, IBuffA, IBuffB
2607 global VBuffMA, VBuffMB, VBuffMC, VBuffMD
2608 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
2609 global FFTBuffA, FFTBuffB, FFTwindowshape
2610 global AWGAwaveform, AWGBwaveform
2611 global Show_MathX, Show_MathY
2612 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
2613 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
2616 TempString = xformentry.get()
2618 MathResult = eval(TempString)
2619 xformlab.configure(text=
"X Formula ", style=
"A10G.TLabel")
2621 xformlab.configure(text=
"X Formula ", style=
"A10R.TLabel")
2624 global MathYString, yformentry, MathYUnits, yunitsentry, MathYAxis, yaxisentry, yformlab
2625 global VBuffA, VBuffB, IBuffA, IBuffB
2626 global VBuffMA, VBuffMB, VBuffMC, VBuffMD
2627 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
2628 global FFTBuffA, FFTBuffB, FFTwindowshape
2629 global AWGAwaveform, AWGBwaveform
2630 global Show_MathX, Show_MathY
2631 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
2632 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
2635 TempString = yformentry.get()
2637 MathResult = eval(TempString)
2638 yformlab.configure(text=
"Y Formula ", style=
"A10G.TLabel")
2640 yformlab.configure(text=
"Y Formula ", style=
"A10R.TLabel")
2643 global MathString, formentry, MathUnits, unitsentry, MathAxis, axisentry
2645 MathString = formentry.get()
2646 MathUnits = unitsentry.get()
2647 MathAxis = axisentry.get()
2650 global MathXString, xformentry, MathXUnits, xunitsentry, MathXAxis, xaxisentry
2652 MathXString = xformentry.get()
2653 MathXUnits = xunitsentry.get()
2654 MathXAxis = xaxisentry.get()
2657 global MathYString, yformentry, MathYUnits, yunitsentry, MathYAxis, yaxisentry
2659 MathYString = yformentry.get()
2660 MathYUnits = yunitsentry.get()
2661 MathYAxis = yaxisentry.get()
2664 global MarkerLoc, RUNstatus
2666 TempString = MarkerLoc
2667 MarkerLoc = askstring(
"Marker Text Location",
"Current Marker Text Location: " + MarkerLoc +
"\n\nNew Location: (UL, UR, LL, LR)\n", initialvalue=MarkerLoc)
2668 if (MarkerLoc ==
None):
2669 MarkerLoc = TempString
2670 if RUNstatus.get() == 0:
2680 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, RUNstatus
2686 if RUNstatus.get() == 0:
2690 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, RUNstatus
2696 if RUNstatus.get() == 0:
2706 global TgInput, TRIGGERlevel, TRIGGERentry, RUNstatus
2707 global MaxV1, MinV1, MaxV2, MinV2
2708 global MaxI1, MinI1, MaxI2, MinI2
2709 global MidVMuxA, MidVMuxB, MidVMuxC, MidVMuxD
2710 global ChopMuxMode, ChopTrig
2712 MidV1 = (MaxV1+MinV1)/2
2713 MidV2 = (MaxV2+MinV2)/2
2714 MidI1 = (MaxI1+MinI1)/2
2715 MidI2 = (MaxI2+MinI2)/2
2716 if (TgInput.get() == 0):
2718 elif (TgInput.get() == 1
or TgInput.get() == 5):
2719 DCString =
' {0:.2f} '.format(MidV1)
2720 elif (TgInput.get() == 2 ):
2721 DCString =
' {0:.2f} '.format(MidI1)
2722 elif (TgInput.get() == 3 ):
2723 DCString =
' {0:.2f} '.format(MidV2)
2724 elif (TgInput.get() == 4 ):
2725 DCString =
' {0:.2f} '.format(MidI2)
2727 if ChopMuxMode.get() > 0:
2728 if ChopTrig.get() == 0:
2730 if ChopTrig.get() == 1:
2731 DCString =
' {0:.2f} '.format(MidVMuxA)
2732 if ChopTrig.get() == 2:
2733 DCString =
' {0:.2f} '.format(MidVMuxB)
2734 if ChopTrig.get() == 3:
2735 DCString =
' {0:.2f} '.format(MidVMuxC)
2736 if ChopTrig.get() == 4:
2737 DCString =
' {0:.2f} '.format(MidVMuxD)
2739 TRIGGERlevel = eval(DCString)
2740 TRIGGERentry.delete(0,END)
2741 TRIGGERentry.insert(4, DCString)
2742 if RUNstatus.get() == 0:
2759 global TRIGGERlevel, TRIGGERentry, RUNstatus
2763 TRIGGERlevel = float(eval(TRIGGERentry.get()))
2765 TRIGGERentry.delete(0,END)
2766 TRIGGERentry.insert(0, TRIGGERlevel)
2768 if RUNstatus.get() == 0:
2773 global HoldOff, HoldOffentry, RUNstatus
2776 HoldOff = float(eval(HoldOffentry.get()))
2778 HoldOffentry.delete(0,END)
2779 HoldOffentry.insert(0, HoldOff)
2780 if RUNstatus.get() == 0:
2784 global HozPoss, HozPossentry, RUNstatus
2787 HozPoss = float(eval(HozPossentry.get()))
2789 HozPossentry.delete(0,END)
2790 HozPossentry.insert(0, HozPoss)
2791 if RUNstatus.get() == 0:
2795 global HozPossentry, TgInput, TMsb
2799 TIMEdiv = float(eval(TMsb.get()))
2802 TMsb.delete(0,
"end")
2803 TMsb.insert(0,TIMEdiv)
2805 if TIMEdiv < 0.0002:
2807 if TgInput.get() > 0:
2808 HozPoss = -5 * TIMEdiv
2809 HozPossentry.delete(0,END)
2810 HozPossentry.insert(0, HozPoss)
2813 global HoldOffentry, HoldOff, TgInput, TMsb
2817 TIMEdiv = float(eval(TMsb.get()))
2820 TMsb.delete(0,
"end")
2821 TMsb.insert(0,TIMEdiv)
2823 if TIMEdiv < 0.0002:
2825 if TgInput.get() == 0:
2826 HoldOff = HoldOff + TIMEdiv
2827 HoldOffentry.delete(0,END)
2828 HoldOffentry.insert(0, HoldOff)
2831 global CHB_APosEntry, DCVMuxA
2833 CHB_APosEntry.delete(0,
"end")
2834 CHB_APosEntry.insert(0,
' {0:.2f} '.format(DCVMuxA))
2837 global CHB_BPosEntry, DCVMuxB
2839 CHB_BPosEntry.delete(0,
"end")
2840 CHB_BPosEntry.insert(0,
' {0:.2f} '.format(DCVMuxB))
2843 global CHB_CPosEntry, DCVMuxC
2845 CHB_CPosEntry.delete(0,
"end")
2846 CHB_CPosEntry.insert(0,
' {0:.2f} '.format(DCVMuxC))
2849 global CHD_BPosEntry, DCVMuxD
2851 CHB_DPosEntry.delete(0,
"end")
2852 CHB_DPosEntry.insert(0,
' {0:.2f} '.format(DCVMuxD))
2855 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2857 if MarkerScale.get() != 1:
2859 CHB_Alab.config(style=
"Rtrace2.TButton")
2860 CHB_Blab.config(style=
"Strace6.TButton")
2861 CHB_Clab.config(style=
"Strace7.TButton")
2862 CHB_Dlab.config(style=
"Strace4.TButton")
2867 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2869 if MarkerScale.get() != 1:
2871 CHB_Alab.config(style=
"Strace2.TButton")
2872 CHB_Blab.config(style=
"Rtrace6.TButton")
2873 CHB_Clab.config(style=
"Strace7.TButton")
2874 CHB_Dlab.config(style=
"Strace4.TButton")
2879 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2881 if MarkerScale.get() != 1:
2883 CHB_Alab.config(style=
"Strace2.TButton")
2884 CHB_Blab.config(style=
"Strace6.TButton")
2885 CHB_Clab.config(style=
"Rtrace7.TButton")
2886 CHB_Dlab.config(style=
"Strace4.TButton")
2891 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2893 if MarkerScale.get() != 1:
2895 CHB_Alab.config(style=
"Strace2.TButton")
2896 CHB_Blab.config(style=
"Strace6.TButton")
2897 CHB_Clab.config(style=
"Strace7.TButton")
2898 CHB_Dlab.config(style=
"Rtrace4.TButton")
2903 global CHAVPosEntry, DCV1
2905 CHAVPosEntry.delete(0,
"end")
2906 CHAVPosEntry.insert(0,
' {0:.2f} '.format(DCV1))
2909 global CHBVPosEntry, DCV2
2911 CHBVPosEntry.delete(0,
"end")
2912 CHBVPosEntry.insert(0,
' {0:.2f} '.format(DCV2))
2915 global CHAIPosEntry, DCI1
2917 CHAIPosEntry.delete(0,
"end")
2918 CHAIPosEntry.insert(0,
' {0:.2f} '.format(DCI1))
2921 global CHBIPosEntry, DCI2
2923 CHBIPosEntry.delete(0,
"end")
2924 CHBIPosEntry.insert(0,
' {0:.2f} '.format(DCI2))
2927 global CHAVPosEntryxy, DCV1
2929 CHAVPosEntryxy.delete(0,
"end")
2930 CHAVPosEntryxy.insert(0,
' {0:.2f} '.format(DCV1))
2933 global CHBVPosEntryxy, DCV2
2935 CHBVPosEntryxy.delete(0,
"end")
2936 CHBVPosEntryxy.insert(0,
' {0:.2f} '.format(DCV2))
2939 global CHAIPosEntryxy, DCI1
2941 CHAIPosEntryxy.delete(0,
"end")
2942 CHAIPosEntryxy.insert(0,
' {0:.2f} '.format(DCI1))
2945 global CHBIPosEntryxy, DCI2
2947 CHBIPosEntryxy.delete(0,
"end")
2948 CHBIPosEntryxy.insert(0,
' {0:.2f} '.format(DCI2))
2951 global RUNstatus, session, CHA, CHB, devx, AWG_2X, Closed
2960 CHA.mode = Mode.HI_Z_SPLIT
2961 CHB.mode = Mode.HI_Z_SPLIT
2968 if session.continuous:
2977 global RUNstatus, PowerStatus, devx, PwrBt, DevID, FWRevOne, session, AWGSync
2978 global contloop, discontloop, TIMEdiv, First_Slow_sweep
2979 global TimeDisp, XYDisp, PhADisp, FreqDisp, BodeDisp, IADisp
2981 if DevID ==
"No Device":
2982 showwarning(
"WARNING",
"No Device Plugged In!")
2983 elif FWRevOne == 0.0:
2984 showwarning(
"WARNING",
"Out of data Firmware!")
2985 elif TimeDisp.get() == 0
and XYDisp.get() == 0
and PhADisp.get() == 0
and FreqDisp.get() == 0
and BodeDisp.get() == 0
and IADisp.get() == 0:
2986 showwarning(
"WARNING",
"Enable at least one Instrument!")
2988 if PowerStatus == 0:
2990 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
2991 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
2992 if (RUNstatus.get() == 0):
2994 if AWGSync.get() == 0:
2996 CHA.mode = Mode.HI_Z_SPLIT
2997 CHB.mode = Mode.HI_Z_SPLIT
2999 if not session.continuous:
3002 elif session.continuous:
3005 CHA.mode = Mode.HI_Z_SPLIT
3006 CHB.mode = Mode.HI_Z_SPLIT
3023 if session.continuous:
3028 First_Slow_sweep = 0
3030 First_Slow_sweep = 1
3033 global session, AWGSync
3036 if AWGSync.get() == 0:
3038 if not session.continuous:
3041 elif session.continuous:
3047 if session.continuous:
3051 global AWGAFreqEntry, AWGAFreqvalue, Two_X_Sample, FWRevOne
3054 AWGAFreqvalue = float(eval(AWGAFreqEntry.get()))
3056 AWGAFreqEntry.delete(0,
"end")
3057 AWGAFreqEntry.insert(0, AWGAFreqvalue)
3059 if AWGAFreqvalue > 10000.0:
3068 global IASource, CHA, CHB, AWGAMode, AWGBMode, AWGBIOMode, AWGSync
3070 if AWGSync.get() == 0:
3072 if IASource.get() == 1:
3073 CHA.mode = Mode.HI_Z
3074 CHB.mode = Mode.HI_Z
3077 CHA.mode = Mode.SVMI
3078 CHB.mode = Mode.HI_Z
3080 if AWGBIOMode.get() == 0:
3084 global RUNstatus, TimeDisp, XYDisp, FreqDisp, IADisp, session, AWGSync
3085 global CHA, CHB, contloop, discontloop
3087 if (RUNstatus.get() == 1):
3090 CHA.mode = Mode.HI_Z_SPLIT
3091 CHB.mode = Mode.HI_Z_SPLIT
3092 if AWGSync.get() == 0:
3097 if session.continuous:
3107 if TimeDisp.get() > 0:
3109 if XYDisp.get() > 0:
3111 if FreqDisp.get() > 0:
3113 if IADisp.get() > 0:
3117 global RUNstatus, PowerStatus, devx, PwrBt
3119 if (RUNstatus.get() == 1):
3121 if PowerStatus == 1:
3123 PwrBt.config(style=
"PwrOff.TButton",text=
"PWR-Off")
3124 devx.ctrl_transfer( 0x40, 0x50, 49, 0, 0, 0, 100)
3127 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
3128 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
3131 global Roll_Mode, RollBt
3133 if Roll_Mode.get() == 1:
3135 RollBt.config(style=
"RollOff.TButton",text=
"Roll-Off")
3138 RollBt.config(style=
"Roll.TButton",text=
"Roll-On")
3142 global TIMEdiv, TMsb, RUNstatus, Two_X_Sample, ETSDisp, FWRevOne, ChopMuxMode
3143 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, AWGSync
3146 TIMEdiv = float(eval(TMsb.get()))
3147 if TIMEdiv < 0.0002:
3149 TMsb.delete(0,
"end")
3150 TMsb.insert(0,TIMEdiv)
3153 TMsb.delete(0,
"end")
3154 TMsb.insert(0,TIMEdiv)
3157 if ETSDisp.get() == 0
and ChopMuxMode.get() == 0:
3158 Samples_per_div = TIMEdiv * 100.0
3160 if Samples_per_div < 20.0:
3161 NumTraces = ShowC1_V.get() + ShowC1_I.get() + ShowC2_V.get() + ShowC2_I.get()
3162 if NumTraces > 2
and AWGSync.get() == 0:
3163 showwarning(
"WARNING",
"You need to Select only 2 Traces or Enable AWG Sync Mode!")
3171 if RUNstatus.get() == 0:
3175 global CHAsb, RUNstatus, CH1vpdvLevel
3178 CH1vpdvLevel = float(eval(CHAsb.get()))
3181 CHAsb.insert(0, CH1vpdvLevel)
3182 if RUNstatus.get() == 0:
3186 global CHAIsb, RUNstatus, CH1ipdvLevel
3189 CH1ipdvLevel = float(eval(CHAIsb.get()))
3191 CHAIsb.delete(0,END)
3192 CHAIsb.insert(0, CH1ipdvLevel)
3193 if RUNstatus.get() == 0:
3197 global CHBsb, RUNstatus, CH2vpdvLevel
3200 CH2vpdvLevel = float(eval(CHBsb.get()))
3203 CHBsb.insert(0, CH2vpdvLevel)
3204 if RUNstatus.get() == 0:
3208 global CHBIsb, RUNstatus, CH2ipdvLevel
3211 CH2ipdvLevel = float(eval(CHBIsb.get()))
3213 CHBIsb.delete(0,END)
3214 CHBIsb.insert(0, CH2ipdvLevel)
3215 if RUNstatus.get() == 0:
3219 global CHAOffset, CHAVPosEntry, RUNstatus
3222 CHAOffset = float(eval(CHAVPosEntry.get()))
3224 CHAVPosEntry.delete(0,END)
3225 CHAVPosEntry.insert(0, CHAOffset)
3227 if RUNstatus.get() == 0:
3231 global CHAIOffset, CHAIPosEntry, RUNstatus
3234 CHAIOffset = float(eval(CHAIPosEntry.get()))
3236 CHAIPosEntry.delete(0,END)
3237 CHAIPosEntry.insert(0, CHAIOffset)
3239 if RUNstatus.get() == 0:
3243 global CHBOffset, CHBVPosEntry, RUNstatus
3246 CHBOffset = float(eval(CHBVPosEntry.get()))
3248 CHBVPosEntry.delete(0,END)
3249 CHBVPosEntry.insert(0, CHBOffset)
3251 if RUNstatus.get() == 0:
3255 global CHBIOffset, CHBIPosEntry, RUNstatus
3258 CHBIOffset = float(eval(CHBIPosEntry.get()))
3260 CHBIPosEntry.delete(0,END)
3261 CHBIPosEntry.insert(0, CHBIOffset)
3263 if RUNstatus.get() == 0:
3267 global TimeDisp, ckb1
3268 if TimeDisp.get() == 1:
3269 ckb1.config(style=
"Enab.TCheckbutton")
3271 ckb1.config(style=
"Disab.TCheckbutton")
3275 if XYDisp.get() == 1:
3276 ckb2.config(style=
"Enab.TCheckbutton")
3278 ckb2.config(style=
"Disab.TCheckbutton")
3281 global FreqDisp, ckb3, OOTckb3, OOTScreenStatus
3282 if FreqDisp.get() == 1:
3283 if OOTScreenStatus.get() == 0:
3284 ckb3.config(style=
"Enab.TCheckbutton")
3286 OOTckb3.config(style=
"Enab.TCheckbutton")
3288 if OOTScreenStatus.get() == 0:
3289 ckb3.config(style=
"Disab.TCheckbutton")
3291 OOTckb3.config(style=
"Disab.TCheckbutton")
3294 global BodeDisp, ckb5, AWGSync, OOTckb5, OOTScreenStatus
3295 if BodeDisp.get() == 1:
3297 if OOTScreenStatus.get() == 0:
3298 ckb5.config(style=
"Enab.TCheckbutton")
3300 OOTckb5.config(style=
"Enab.TCheckbutton")
3302 if OOTScreenStatus.get() == 0:
3303 ckb5.config(style=
"Disab.TCheckbutton")
3305 OOTckb5.config(style=
"Disab.TCheckbutton")
3308 global IADisp, ckb4, OOTckb4, OOTScreenStatus
3309 if IADisp.get() == 1:
3310 if OOTScreenStatus.get() == 0:
3311 ckb4.config(style=
"Enab.TCheckbutton")
3313 OOTckb4.config(style=
"Enab.TCheckbutton")
3315 if OOTScreenStatus.get() == 0:
3316 ckb4.config(style=
"Disab.TCheckbutton")
3318 OOTckb4.config(style=
"Disab.TCheckbutton")
3321 global PhADisp, Phckb, OOTphckb, OOTScreenStatus
3322 if PhADisp.get() == 1:
3323 if OOTScreenStatus.get() == 0:
3324 phckb.config(style=
"Enab.TCheckbutton")
3326 OOTphckb.config(style=
"Enab.TCheckbutton")
3328 if OOTScreenStatus.get() == 0:
3329 phckb.config(style=
"Disab.TCheckbutton")
3331 OOTphckb.config(style=
"Disab.TCheckbutton")
3334 global OhmDisp, ckb6, OOTckb6, OOTScreenStatus
3335 if OhmDisp.get() == 1:
3336 if OOTScreenStatus.get() == 0:
3337 ckb6.config(style=
"Enab.TCheckbutton")
3339 OOTckb6.config(style=
"Enab.TCheckbutton")
3341 if OOTScreenStatus.get() == 0:
3342 ckb6.config(style=
"Disab.TCheckbutton")
3344 OOTckb6.config(style=
"Disab.TCheckbutton")
3347 global ETSDisp, enb1
3348 if ETSDisp.get() == 1:
3349 enb1.config(style=
"Enab.TCheckbutton")
3352 enb1.config(style=
"Disab.TCheckbutton")
3358 global RUNstatus, SingleShot, ManualTrigger, TimeDisp, XYDisp, FreqDisp, SpectrumScreenStatus, HWRevOne
3359 global PhADisp, IADisp, IAScreenStatus, CutDC, DevOne, AWGBMode, MuxEnb, BodeScreenStatus, BodeDisp
3360 global MuxScreenStatus, VBuffA, VBuffB, MuxSync, AWGBIOMode
3361 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD, MuxChan
3362 global ShowC1_V, ShowC2_V, ShowC2_I, SMPfft
3363 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
3364 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
3365 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
3366 global SV1, SI1, SV2, SI2, SVA_B, Closed
3367 global FregPoint, FBins, FStep, TRACEaverage
3369 global TRACEresetTime, TRACEmodeTime, TgInput, SettingsStatus, TRIGGERsample
3370 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, DualMuxMode, ChopMuxMode
3371 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
3372 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
3373 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
3374 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
3375 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
3377 while (Closed == 0):
3379 if (RUNstatus.get() == 1)
or (RUNstatus.get() == 2):
3380 if SettingsStatus.get() == 1:
3382 if TimeDisp.get() > 0
or XYDisp.get() > 0
or PhADisp.get() > 0:
3383 if MuxScreenStatus.get() == 0:
3388 if DualMuxMode.get() == 1:
3393 if HWRevOne ==
"D" :
3396 if AWGBIOMode.get() == 0:
3398 if MuxEnb.get() == 1:
3402 if MuxSync.get() == 0:
3409 if ChopMuxMode.get() == 0:
3410 if TRACEmodeTime.get() == 0
and TRACEresetTime ==
False:
3411 TRACEresetTime =
True
3412 if Show_CBA.get() == 1:
3414 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
3415 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
3416 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
3417 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
3419 devx.ctrl_transfer(0x40, PIO3x, PIO_3, 0, 0, 0, 100)
3420 if TRACEmodeTime.get() == 1:
3421 if TRACEresetTime ==
True:
3422 TRACEresetTime =
False
3424 VmemoryMuxA = VBuffMA
3426 if Show_CBB.get() == 1:
3428 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
3429 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
3430 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
3431 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
3433 devx.ctrl_transfer(0x40, PIO3x, 3, 0, 0, 0, 100)
3434 if TRACEmodeTime.get() == 1:
3435 if TRACEresetTime ==
True:
3436 TRACEresetTime =
False
3438 VmemoryMuxB = VBuffMB
3440 if Show_CBC.get() == 1:
3442 if DualMuxMode.get() == 1:
3443 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
3444 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
3446 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
3447 devx.ctrl_transfer(0x40, 0x51, PIO_1, 0, 0, 0, 100)
3448 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
3449 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
3451 devx.ctrl_transfer(0x40, PIO3x, PIO_3, 0, 0, 0, 100)
3452 if TRACEmodeTime.get() == 1:
3453 if TRACEresetTime ==
True:
3454 TRACEresetTime =
False
3456 VmemoryMuxC = VBuffMC
3458 if Show_CBD.get() == 1:
3460 if DualMuxMode.get() == 1:
3461 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
3462 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
3464 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
3465 devx.ctrl_transfer(0x40, 0x51, PIO_1, 0, 0, 0, 100)
3466 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
3467 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
3469 devx.ctrl_transfer(0x40, PIO3x, PIO_3, 0, 0, 0, 100)
3470 if TRACEmodeTime.get() == 1:
3471 if TRACEresetTime ==
True:
3472 TRACEresetTime =
False
3474 VmemoryMuxD = VBuffMD
3476 if Show_CBA.get() == 0
and Show_CBB.get() == 0
and Show_CBC.get() == 0
and Show_CBD.get() == 0
and ShowC1_V.get() == 1:
3480 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
3481 if TRACEmodeTime.get() == 0
and TRACEresetTime ==
False:
3482 TRACEresetTime =
True
3483 elif TRACEmodeTime.get() == 1:
3484 if TRACEresetTime ==
True:
3485 TRACEresetTime =
False
3487 VmemoryMuxA = VBuffMA
3488 VmemoryMuxB = VBuffMB
3489 VmemoryMuxC = VBuffMC
3490 VmemoryMuxD = VBuffMD
3492 if (FreqDisp.get() > 0
and SpectrumScreenStatus.get() == 1)
or (IADisp.get() > 0
and IAScreenStatus.get() == 1)
or (BodeDisp.get() > 0
and BodeScreenStatus.get() == 1):
3493 if IADisp.get() > 0
or BodeDisp.get() > 0:
3496 if BodeDisp.get() > 0:
3497 if LoopNum.get() <= len(FStep):
3498 FregPoint = FBins[int(FStep[LoopNum.get()-1])]
3499 if FregPoint < 100.0:
3501 elif FregPoint < 500.0:
3503 elif FregPoint < 2000.0:
3507 if Two_X_Sample.get() > 0
and FregPoint < 2000.0:
3511 elif OhmRunStatus.get() == 1
and OhmDisp.get() == 1:
3513 root.update_idletasks()
3517 global RMode, CHATestVEntry, CHATestREntry, CHA, CHB, devx, OhmA0, OhmA1, discontloop
3518 global AWGAMode, AWGBMode, AWGAShape, AWGSync, AWGBTerm, AWGAOffsetEntry
3519 global AWGAIOMode, AWGBIOMode, Two_X_Sample
3523 InOffA = float(eval(CHAVOffsetEntry.get()))
3525 CHAVOffsetEntry.delete(0,END)
3526 CHAVOffsetEntry.insert(0, InOffA)
3528 InGainA = float(eval(CHAVGainEntry.get()))
3530 CHAVGainEntry.delete(0,END)
3531 CHAVGainEntry.insert(0, InGainA)
3533 InOffB = float(eval(CHBVOffsetEntry.get()))
3535 CHBVOffsetEntry.delete(0,END)
3536 CHBVOffsetEntry.insert(0, InOffB)
3538 InGainB = float(eval(CHBVGainEntry.get()))
3540 CHBVGainEntry.delete(0,END)
3541 CHBVGainEntry.insert(0, InGainB)
3543 CurOffA = float(CHAIOffsetEntry.get())
3547 CurOffB = float(CHBIOffsetEntry.get())
3551 CurGainA = float(CHAIGainEntry.get())
3555 CurGainB = float(CHBIGainEntry.get())
3559 chatestv = float(eval(CHATestVEntry.get()))
3562 CHATestVEntry.delete(0,END)
3563 CHATestVEntry.insert(0, chatestv)
3565 CHATestVEntry.delete(0,END)
3566 CHATestVEntry.insert(0, chatestv)
3568 chatestr = float(eval(CHATestREntry.get()))
3570 CHATestREntry.delete(0,END)
3571 CHATestREntry.insert(0, chatestr)
3573 DCVA0 = DCVB0 = DCIA0 = DCIB0 = 0.0
3583 AWGAOffsetEntry.delete(0,
"end")
3584 AWGAOffsetEntry.insert(0, chatestv)
3588 if RMode.get() == 0:
3593 if AWGSync.get() > 0:
3600 ADsignal1 = devx.get_samples(210)
3603 if session.continuous:
3604 ADsignal1 = devx.read(210, -1,
True)
3607 for index
in range(200):
3608 DCVA0 += ADsignal1[index+10][0][0]
3609 DCVB0 += ADsignal1[index+10][1][0]
3610 DCIA0 += ADsignal1[index+10][0][1]
3611 DCIB0 += ADsignal1[index+10][1][1]
3613 DCVA0 = DCVA0 / 200.0
3614 DCVB0 = DCVB0 / 200.0
3615 DCIA0 = DCIA0 / 200.0
3616 DCIB0 = DCIB0 / 200.0
3617 DCVA0 = (DCVA0 - InOffA) * InGainA
3618 DCVB0 = (DCVB0 - InOffB) * InGainB
3619 DCIA0 = ((DCIA0*1000) - CurOffA) * CurGainA
3620 DCIB0 = ((DCIB0*1000) - CurOffB) * CurGainB
3621 if RMode.get() == 0:
3622 DCM = chatestr * (DCVB0/(DCVA0-DCVB0))
3623 DCR = (DCM * RIN) / (RIN - DCM)
3625 DCR = chatestr * ((DCVA0-DCVB0)/DCVB0)
3627 OhmString =
'{0:.2f} '.format(DCR) +
"Ohms "
3629 OhmString =
'{0:.3f} '.format(DCR/1000) +
"KOhms "
3630 IAString =
"Meas " +
' {0:.2f} '.format(DCIA0) +
" mA " +
' {0:.2f} '.format(DCVB0) +
" V"
3631 OhmA0.config(text = OhmString)
3632 OhmA1.config(text = IAString)
3635 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
3639 global TIMEdiv, TMsb, TRACEmodeTime, TRACEresetTime, TRACEaverage
3640 global VBuffMA, VmemoryMuxA, VBuffMB, VmemoryMuxB, VBuffMC, VmemoryMuxC, VBuffMD, VmemoryMuxD
3641 global CHAVOffsetEntry, CHAVGainEntry, CHBVOffsetEntry, CHBVGainEntry
3642 global CHAIOffsetEntry, CHBIOffsetEntry, CHAIGainEntry, CHBIGainEntry
3643 global InOffA, InGainA, InOffB, InGainB
3644 global CurOffA, CurOffB, CurGainA, CurGainB
3645 global PhADisp, PhAScreenStatus, MuxScreenStatus, ChopMuxMode
3646 global First_Slow_sweep, Roll_Mode
3647 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
3651 TIMEdiv = eval(TMsb.get())
3654 TMsb.delete(0,
"end")
3655 TMsb.insert(0,TIMEdiv)
3656 if TIMEdiv < 0.0002:
3661 InOffA = float(eval(CHAVOffsetEntry.get()))
3663 CHAVOffsetEntry.delete(0,END)
3664 CHAVOffsetEntry.insert(0, InOffA)
3666 InGainA = float(eval(CHAVGainEntry.get()))
3668 CHAVGainEntry.delete(0,END)
3669 CHAVGainEntry.insert(0, InGainA)
3671 InOffB = float(eval(CHBVOffsetEntry.get()))
3673 CHBVOffsetEntry.delete(0,END)
3674 CHBVOffsetEntry.insert(0, InOffB)
3676 InGainB = float(eval(CHBVGainEntry.get()))
3678 CHBVGainEntry.delete(0,END)
3679 CHBVGainEntry.insert(0, InGainB)
3681 CurOffA = float(CHAIOffsetEntry.get())
3685 CurOffB = float(CHBIOffsetEntry.get())
3689 CurGainA = float(CHAIGainEntry.get())
3693 CurGainB = float(CHBIGainEntry.get())
3697 if Roll_Mode.get() > 0:
3700 First_Slow_sweep = 0
3703 if PhADisp.get() > 0
and PhAScreenStatus.get() == 1:
3708 global ADsignal1, VBuffA, VBuffB, IBuffA, IBuffB
3709 global VBuffMA, VBuffMB, VBuffMC, VBuffMD
3710 global VAresult, VBresult, IAresult, IBresult, VABresult
3711 global PhaseVA, PhaseVB, PhaseIA, PhaseIB, PhaseVAB
3712 global VMAresult, VMBresult,VMCresult, VMDresult
3713 global PhaseVMA, PhaseVMB, PhaseVMC, PhaseVMD
3714 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
3715 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
3716 global DCVMuxA, DCVMuxB, DCVMuxC, DCVMuxD
3717 global SHOWsamples, SMPfft, hldn, MuxScreenStatus, MuxChan, ChopMuxMode
3718 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D
3719 global FFTwindowshape, ZEROstuffing
3721 if len(VBuffA) < SMPfft:
3728 StopSmp = hldn + SMPfft
3736 REX = numpy.array(VBuffA[StartSmp:StopSmp]-DCV1)
3742 REX = REX * FFTwindowshape[0:len(REX)]
3744 ALL = numpy.fft.fft(REX, n=SMPfft)
3745 PhaseVA = numpy.angle(ALL, deg=
True)
3746 ALL = numpy.absolute(ALL)
3748 le = int(len(ALL) / 2)
3750 PhaseVA = PhaseVA[0:le]
3751 Totalcorr = 7.07106 / SMPfft
3752 VAresult = Totalcorr * ALL
3754 if MuxScreenStatus.get() == 0:
3758 REX = numpy.array(VBuffB[StartSmp:StopSmp]-DCV2)
3764 REX = REX * FFTwindowshape[0:len(REX)]
3767 ALL = numpy.fft.fft(REX, n=SMPfft)
3768 PhaseVB = numpy.angle(ALL, deg=
True)
3769 ALL = numpy.absolute(ALL)
3771 le = int(len(ALL) / 2)
3773 PhaseVB = PhaseVB[0:le]
3774 RMScorr = 7.07106 / SMPfft
3775 VBresult = RMScorr * ALL
3778 REX = numpy.array(VBuffA[StartSmp:StopSmp]-VBuffB[StartSmp:StopSmp])
3779 REX = REX - (DCV1-DCV2)
3784 REX = REX * FFTwindowshape[0:len(REX)]
3787 ALL = numpy.fft.fft(REX, n=SMPfft)
3788 PhaseVAB = numpy.angle(ALL, deg=
True)
3789 ALL = numpy.absolute(ALL)
3791 le = int(len(ALL) / 2)
3793 PhaseVAB = PhaseVAB[0:le]
3794 RMScorr = 7.07106 / SMPfft
3795 VABresult = RMScorr * ALL
3797 if MuxChan == 0
or ChopMuxMode.get() > 0:
3800 REX = numpy.array(VBuffMA[StartSmp:StopSmp]-DCVMuxA)
3806 REX = REX * FFTwindowshape[0:len(REX)]
3809 ALL = numpy.fft.fft(REX, n=SMPfft)
3810 PhaseVMA = numpy.angle(ALL, deg=
True)
3811 ALL = numpy.absolute(ALL)
3813 le = int(len(ALL) / 2)
3815 PhaseVMA = PhaseVMA[0:le]
3816 RMScorr = 7.07106 / SMPfft
3817 VMAresult = RMScorr * ALL
3818 if MuxChan == 1
or ChopMuxMode.get() > 0:
3821 REX = numpy.array(VBuffMB[StartSmp:StopSmp]-DCVMuxB)
3827 REX = REX * FFTwindowshape[0:len(REX)]
3830 ALL = numpy.fft.fft(REX, n=SMPfft)
3831 PhaseVMB = numpy.angle(ALL, deg=
True)
3832 ALL = numpy.absolute(ALL)
3834 le = int(len(ALL) / 2)
3836 PhaseVMB = PhaseVMB[0:le]
3837 RMScorr = 7.07106 / SMPfft
3838 VMBresult = RMScorr * ALL
3839 if MuxChan == 2
or ChopMuxMode.get() > 0:
3842 REX = numpy.array(VBuffMC[StartSmp:StopSmp]-DCVMuxC)
3848 REX = REX * FFTwindowshape[0:len(REX)]
3851 ALL = numpy.fft.fft(REX, n=SMPfft)
3852 PhaseVMC = numpy.angle(ALL, deg=
True)
3853 ALL = numpy.absolute(ALL)
3855 le = int(len(ALL) / 2)
3857 PhaseVMC = PhaseVMC[0:le]
3858 RMScorr = 7.07106 / SMPfft
3859 VMCresult = RMScorr * ALL
3860 if MuxChan == 3
or ChopMuxMode.get() > 0:
3863 REX = numpy.array(VBuffMD[StartSmp:StopSmp]-DCVMuxD)
3869 REX = REX * FFTwindowshape[0:len(REX)]
3872 ALL = numpy.fft.fft(REX, n=SMPfft)
3873 PhaseVMD = numpy.angle(ALL, deg=
True)
3874 ALL = numpy.absolute(ALL)
3876 le = int(len(ALL) / 2)
3878 PhaseVMD = PhaseVMD[0:le]
3879 RMScorr = 7.07106 / SMPfft
3880 VMDresult = RMScorr * ALL
3882 REX = numpy.array(IBuffA[StartSmp:StopSmp])
3888 REX = REX * FFTwindowshape[0:len(REX)]
3891 ALL = numpy.fft.fft(REX, n=SMPfft)
3892 PhaseIA = numpy.angle(ALL, deg=
True)
3893 ALL = numpy.absolute(ALL)
3895 le = int(len(ALL) / 2)
3897 PhaseIA = PhaseIA[0:le]
3898 RMScorr = 0.707106 / SMPfft
3899 IAresult = RMScorr * ALL
3902 REX = numpy.array(IBuffB[StartSmp:StopSmp])
3908 REX = REX * FFTwindowshape[0:len(REX)]
3911 ALL = numpy.fft.fft(REX, n=SMPfft)
3912 PhaseIB = numpy.angle(ALL, deg=
True)
3913 ALL = numpy.absolute(ALL)
3915 le = int(len(ALL) / 2)
3917 PhaseIB = PhaseIB[0:le]
3918 RMScorr = 0.707106 / SMPfft
3919 IBresult = RMScorr * ALL
3925 global ADsignal1, VBuffA, VBuffB, IBuffA, IBuffB, VFilterA, VFilterB
3926 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
3927 global DBuff0, DBuff1, DBuff2, DBuff3, D0, D1, D2, D3
3928 global AWGSync, AWGAMode, AWGBMode, TMsb, HoldOff, HoldOffentry, HozPoss, HozPossentry
3929 global AWGAIOMode, AWGBIOMode, DecimateOption, DualMuxMode, MuxChan
3930 global TRACEresetTime, TRACEmodeTime, TRACEaverage, TRIGGERsample, TgInput, LShift
3931 global CHA, CHB, session, devx, discontloop, contloop
3932 global TRACES, TRACESread, TRACEsize, First_Slow_sweep, Roll_Mode
3933 global RUNstatus, SingleShot, ManualTrigger, TimeDisp, XYDisp, FreqDisp
3934 global TIMEdiv1x, TIMEdiv, hldn, Is_Triggered, GRW
3935 global SAMPLErate, SHOWsamples, MinSamples, MaxSamples, AWGSAMPLErate
3936 global TRACErefresh, AWGScreenStatus, XYScreenStatus, MeasureStatus
3937 global SCREENrefresh, DCrefresh
3938 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
3939 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
3940 global SV1, SI1, SV2, SI2, SVA_B
3941 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
3942 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
3943 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
3944 global InOffA, InGainA, InOffB, InGainB, CurOffA, CurOffB, CurGainA, CurGainB
3945 global DigFiltA, DigFiltB, DFiltACoef, DFiltBCoef, DigBuffA, DigBuffB
3946 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
3947 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
3948 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
3949 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
3950 global VAets, VBets, Samples_Cycle, MulX, ETSDisp, ETSDir, ETSts, Fmin, FminE, eqivsamplerate
3951 global DivXEntry, FOffEntry, FminDisp, FOff, DivX, FMulXEntry, FBase, MaxETSrecord
3952 global cal, Two_X_Sample, ADC_Mux_Mode, Alternate_Sweep_Mode, Last_ADC_Mux_Mode
3953 global MeasGateLeft, MeasGateRight, MeasGateNum, MeasGateStatus
3954 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, DualMuxMode
3955 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD
3956 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
3957 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
3958 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
3959 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
3960 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
3961 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
3964 DCVA0 = DCVB0 = DCIA0 = DCIB0= 0.0
3967 if First_Slow_sweep == 0:
3968 VBuffA = numpy.ones(GRW)
3969 VBuffB = numpy.ones(GRW)
3970 IBuffA = numpy.ones(GRW)
3971 IBuffB = numpy.ones(GRW)
3972 DBuff0 = numpy.ones(GRW)
3973 DBuff1 = numpy.ones(GRW)
3974 DBuff2 = numpy.ones(GRW)
3975 DBuff3 = numpy.ones(GRW)
3976 First_Slow_sweep = 1
3977 if len(VBuffA) != GRW:
3978 VBuffA = numpy.ones(GRW)
3979 VBuffB = numpy.ones(GRW)
3980 IBuffA = numpy.ones(GRW)
3981 IBuffB = numpy.ones(GRW)
3982 DBuff0 = numpy.ones(GRW)
3983 DBuff1 = numpy.ones(GRW)
3984 DBuff2 = numpy.ones(GRW)
3985 DBuff3 = numpy.ones(GRW)
3987 if AWGScreenStatus.get() == 1:
3988 if AWGSync.get() > 0:
3994 ADsignal1 = devx.get_samples(NumSamples)
3996 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
3997 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
3998 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
3999 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
4002 if session.continuous:
4003 if MuxScreenStatus.get() > 0:
4004 devx.flush(-1,
True)
4005 DummySamples = NumSamples*2
4006 if DummySamples < 10000:
4007 DummySamples = 10000
4008 ADsignal1 = devx.read(DummySamples, -1,
True)
4009 ADsignal1 = devx.read(NumSamples, -1,
True)
4012 ADsignal1 = devx.get_samples(NumSamples)
4019 for index
in range(NumSamples):
4020 DCVA0 += ADsignal1[index][0][0]
4021 DCVB0 += ADsignal1[index][1][0]
4022 DCIA0 += ADsignal1[index][0][1]
4023 DCIB0 += ADsignal1[index][1][1]
4024 DCVA0 = DCVA0/(NumSamples)
4025 DCVB0 = DCVB0/(NumSamples)
4026 DCIA0 = DCIA0/(NumSamples)
4027 DCIB0 = DCIB0/(NumSamples)
4030 DCVA0 = (DCVA0 - InOffA) * InGainA
4031 DCVB0 = (DCVB0 - InOffB) * InGainB
4032 DCIA0 = (DCIA0 - CurOffA) * CurGainA
4033 DCIB0 = (DCIB0 - CurOffB) * CurGainB
4034 DCIA0 = DCIA0 * 1000
4035 DCIB0 = DCIB0 * 1000
4056 DBuff0 =
shift_buffer(DBuff0, -1, devx.ctrl_transfer( 0xc0, 0x91, PIO_0, 0, 0, 1, 100))
4058 DBuff1 =
shift_buffer(DBuff1, -1, devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100))
4060 DBuff2 =
shift_buffer(DBuff2, -1, devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100))
4062 DBuff3 =
shift_buffer(DBuff3, -1, devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100))
4064 DCV1 = numpy.mean(VBuffA)
4065 DCV2 = numpy.mean(VBuffB)
4066 DCI1 = numpy.mean(IBuffA)
4067 DCI2 = numpy.mean(IBuffB)
4069 MinV1 = numpy.amin(VBuffA)
4070 MaxV1 = numpy.amax(VBuffA)
4071 MinV2 = numpy.amin(VBuffB)
4072 MaxV2 = numpy.amax(VBuffB)
4073 MinI1 = numpy.amin(IBuffA)
4074 MaxI1 = numpy.amax(IBuffA)
4075 MinI2 = numpy.amin(IBuffB)
4076 MaxI2 = numpy.amax(IBuffB)
4078 SV1 = numpy.sqrt(numpy.mean(numpy.square(VBuffA)))
4079 SI1 = numpy.sqrt(numpy.mean(numpy.square(IBuffA)))
4080 SV2 = numpy.sqrt(numpy.mean(numpy.square(VBuffB)))
4081 SI2 = numpy.sqrt(numpy.mean(numpy.square(IBuffB)))
4082 SVA_B = numpy.sqrt(numpy.mean(numpy.square(VBuffA-VBuffB)))
4084 if TimeDisp.get() > 0:
4087 if XYDisp.get() > 0
and XYScreenStatus.get() > 0:
4089 if MeasureStatus.get() > 0:
4094 global ADsignal1, VBuffMA, VBuffMB, VBuffMC, VBuffMD
4095 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
4096 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
4097 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
4098 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
4099 global SHOWsamples, ChopModeFilter
4106 while index < SHOWsamples-3:
4109 VBuffMA.append(ADsignal1[index+3][0][0])
4110 VBuffMB.append(ADsignal1[index+1][0][0])
4111 VBuffMC.append(ADsignal1[index+3][1][0])
4112 VBuffMD.append(ADsignal1[index+1][1][0])
4113 pointer = pointer + 1
4115 VBuffMA = numpy.array(VBuffMA)
4116 VBuffMB = numpy.array(VBuffMB)
4117 VBuffMC = numpy.array(VBuffMC)
4118 VBuffMD = numpy.array(VBuffMD)
4120 VBuffMA = numpy.pad(VBuffMA, (4, 0),
"edge")
4121 VBuffMA = numpy.convolve(VBuffMA, ChopModeFilter )
4122 VBuffMA = numpy.roll(VBuffMA, -4)
4123 VBuffMB = numpy.pad(VBuffMB, (4, 0),
"edge")
4124 VBuffMB = numpy.convolve(VBuffMB, ChopModeFilter)
4125 VBuffMB = numpy.roll(VBuffMB, -6)
4126 VBuffMC = numpy.pad(VBuffMC, (4, 0),
"edge")
4127 VBuffMC = numpy.convolve(VBuffMC, ChopModeFilter )
4128 VBuffMC = numpy.roll(VBuffMC, -4)
4129 VBuffMD = numpy.pad(VBuffMD, (4, 0),
"edge")
4130 VBuffMD = numpy.convolve(VBuffMD, ChopModeFilter )
4131 VBuffMD = numpy.roll(VBuffMD, -6)
4133 EndSample = SHOWsamples-4
4134 DCVMuxA = numpy.mean(VBuffMA[:EndSample])
4135 MinVMuxA = numpy.amin(VBuffMA[:EndSample])
4136 MaxVMuxA = numpy.amax(VBuffMA[:EndSample])
4137 MidVMuxA = (MaxVMuxA+MinVMuxA)/2.0
4138 PPVMuxA = MaxVMuxA-MinVMuxA
4140 DCVMuxB = numpy.mean(VBuffMB[:EndSample])
4141 MinVMuxB = numpy.amin(VBuffMB[:EndSample])
4142 MaxVMuxB = numpy.amax(VBuffMB[:EndSample])
4143 MidVMuxB = (MaxVMuxB+MinVMuxB)/2.0
4144 PPVMuxB = MaxVMuxB-MinVMuxB
4146 DCVMuxC = numpy.mean(VBuffMC[:EndSample])
4147 MinVMuxC = numpy.amin(VBuffMC[:EndSample])
4148 MaxVMuxC = numpy.amax(VBuffMC[:EndSample])
4149 MidVMuxC = (MaxVMuxC+MinVMuxC)/2.0
4150 PPVMuxC = MaxVMuxC-MinVMuxC
4152 DCVMuxD = numpy.mean(VBuffMD[:EndSample])
4153 MinVMuxD = numpy.amin(VBuffMD[:EndSample])
4154 MaxVMuxD = numpy.amax(VBuffMD[:EndSample])
4155 MidVMuxD = (MaxVMuxD+MinVMuxD)/2.0
4156 PPVMuxD = MaxVMuxD-MinVMuxD
4158 SVMuxA = numpy.sqrt(numpy.mean(numpy.square(VBuffMA[:EndSample])))
4159 SVMuxB = numpy.sqrt(numpy.mean(numpy.square(VBuffMB[:EndSample])))
4160 SVMuxC = numpy.sqrt(numpy.mean(numpy.square(VBuffMC[:EndSample])))
4161 SVMuxD = numpy.sqrt(numpy.mean(numpy.square(VBuffMD[:EndSample])))
4165 global ADsignal1, VBuffA, VBuffB, IBuffA, IBuffB, VFilterA, VFilterB
4166 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
4167 global AWGSync, AWGAMode, AWGBMode, TMsb, HoldOff, HoldOffentry, HozPoss, HozPossentry
4168 global AWGAIOMode, AWGBIOMode, DecimateOption, DualMuxMode, MuxChan
4169 global TRACEresetTime, TRACEmodeTime, TRACEaverage, TRIGGERsample, TgInput, LShift
4170 global CHA, CHB, session, devx, discontloop, contloop, DeBugMode
4171 global TRACES, TRACESread, TRACEsize, TRIGGERsampleAltA, TRIGGERsampleAltB
4172 global RUNstatus, SingleShot, ManualTrigger, TimeDisp, XYDisp, FreqDisp
4173 global TIMEdiv1x, TIMEdiv, hldn, Is_Triggered, Trigger_LPF_length, LPFTrigger
4174 global SAMPLErate, SHOWsamples, SMPfft, MinSamples, MaxSamples, AWGSAMPLErate
4175 global TRACErefresh, AWGScreenStatus, XYScreenStatus, MeasureStatus
4176 global SCREENrefresh, DCrefresh, ETSrecord
4177 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
4178 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
4179 global SV1, SI1, SV2, SI2, SVA_B
4180 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
4181 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
4182 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
4183 global InOffA, InGainA, InOffB, InGainB, CurOffA, CurOffB, CurGainA, CurGainB
4184 global DigFiltA, DigFiltB, DFiltACoef, DFiltBCoef, DigBuffA, DigBuffB
4185 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2, CHAI_RC_HP, CHBI_RC_HP
4186 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
4187 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
4188 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
4189 global VAets, VBets, Samples_Cycle, MulX, ETSDisp, ETSDir, ETSts, Fmin, FminE, eqivsamplerate
4190 global DivXEntry, FOffEntry, FminDisp, FOff, DivX, FMulXEntry, FBase, MaxETSrecord
4191 global cal, Two_X_Sample, ADC_Mux_Mode, Alternate_Sweep_Mode, Last_ADC_Mux_Mode
4192 global MeasGateLeft, MeasGateRight, MeasGateNum, MeasGateStatus
4193 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, DualMuxMode, ChopMuxMode, ChopTrig
4194 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD
4195 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
4196 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
4197 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
4198 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
4199 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
4200 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
4201 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
4202 global BCASkewEntry, BCBSkewEntry, DigDeSkewA, DigDeSkewB
4204 if TRACEmodeTime.get() == 0
and TRACEresetTime ==
False:
4205 TRACEresetTime =
True
4206 elif TRACEmodeTime.get() == 1:
4207 if TRACEresetTime ==
True:
4208 TRACEresetTime =
False
4216 HoldOff = float(eval(HoldOffentry.get()))
4219 HoldOffentry.delete(0,END)
4220 HoldOffentry.insert(0, HoldOff)
4222 HoldOffentry.delete(0,END)
4223 HoldOffentry.insert(0, HoldOff)
4226 HozPoss = float(eval(HozPossentry.get()))
4228 HozPossentry.delete(0,END)
4229 HozPossentry.insert(0, HozPoss)
4231 hldn = int(HoldOff * SAMPLErate/1000 )
4232 hozpos = int(HozPoss * SAMPLErate/1000 )
4235 twoscreens = int(SAMPLErate * 20.0 * TIMEdiv / 1000.0)
4236 onescreen = int(twoscreens/2)
4237 if hldn+hozpos > MaxSamples-twoscreens:
4238 hldn = MaxSamples-twoscreens-hozpos
4239 HoldOffentry.delete(0,END)
4240 HoldOffentry.insert(0, hldn*1000/SAMPLErate)
4241 if ETSDisp.get() > 0:
4243 MaxETSrecord = int(AWGSAMPLErate * 10 * TIMEdiv / 1000.0)
4245 MaxETSrecord = int(AWGSAMPLErate * 20 * TIMEdiv / 1000.0)
4246 if (MaxETSrecord*100) > MaxSamples:
4247 MaxETSrecord = MaxSamples / 100
4249 DivX = float(eval(DivXEntry.get()))
4254 DivXEntry.delete(0,END)
4255 DivXEntry.insert(0, DivX)
4257 DivXEntry.delete(0,END)
4258 DivXEntry.insert(0, DivX)
4260 MulX = (DivX*SAMPLErate)/(100*FOff)
4261 while MulX > MaxETSrecord:
4263 MulX = (DivX*SAMPLErate)/(100*FOff)
4266 SRstring =
"Rec Len Mul = " + str(MulX) +
" samples"
4267 MulXEntry.config(text = SRstring)
4268 SRstring =
"Offset = " + str(FOff) +
" samples"
4269 FOffEntry.config(text = SRstring)
4270 SHOWsamples = int(MulX * 100)
4272 SHOWsamples = twoscreens + hldn + hozpos
4273 if SHOWsamples > MaxSamples:
4274 SHOWsamples = MaxSamples
4275 if SHOWsamples < MinSamples:
4276 SHOWsamples = MinSamples
4277 if PhAScreenStatus.get() > 0:
4278 if SHOWsamples < SMPfft:
4279 SHOWsamples = SMPfft + hldn + hozpos
4281 TRIGGERsample = hldn
4283 TRIGGERsample = abs(hozpos)
4284 TRIGGERsample = TRIGGERsample + hozpos
4286 if AWGScreenStatus.get() == 1:
4287 if AWGSync.get() > 0:
4294 ADsignal1 = devx.get_samples(SHOWsamples)
4296 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
4297 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
4298 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
4299 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
4301 if session.continuous:
4302 if MuxScreenStatus.get() > 0:
4303 devx.flush(-1,
True)
4304 DummySamples = SHOWsamples*2
4305 if DummySamples < 20000:
4306 DummySamples = 20000
4307 ADsignal1 = devx.read(DummySamples, -1,
True)
4308 ADsignal1 = devx.read(SHOWsamples, -1,
True)
4311 ADsignal1 = devx.get_samples(SHOWsamples)
4313 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
4314 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
4315 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
4316 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
4318 if Alternate_Sweep_Mode.get() == 1
and Two_X_Sample.get() == 1:
4319 if ADC_Mux_Mode.get() == 0:
4322 elif ADC_Mux_Mode.get() == 1:
4325 elif ADC_Mux_Mode.get() == 4:
4328 elif ADC_Mux_Mode.get() == 5:
4338 if SHOWsamples >= 20000
and DecimateOption.get() > 0:
4340 SAMPLErate = int(AWGSAMPLErate/increment)
4341 if SHOWsamples >= 40000
and DecimateOption.get() > 0:
4343 SAMPLErate = int(AWGSAMPLErate/increment)
4345 if SHOWsamples != len(ADsignal1):
4346 SHOWsamples = len(ADsignal1)
4348 if ChopMuxMode.get() > 0
and MuxScreenStatus.get() > 0:
4351 while index < SHOWsamples:
4352 if Two_X_Sample.get() == 1
and ADC_Mux_Mode.get() < 6:
4353 if ADC_Mux_Mode.get() == 0:
4354 VBuffA.append(ADsignal1[index][0][0])
4355 VBuffA.append(ADsignal1[index][1][1])
4356 VBuffB.append(ADsignal1[index][0][1])
4357 VBuffB.append(ADsignal1[index][1][0])
4358 if Alternate_Sweep_Mode.get() == 0:
4363 elif ADC_Mux_Mode.get() == 1:
4364 IBuffA.append(ADsignal1[index][0][1])
4365 IBuffA.append(ADsignal1[index][1][0])
4366 IBuffB.append(ADsignal1[index][0][0])
4367 IBuffB.append(ADsignal1[index][1][1])
4368 if Alternate_Sweep_Mode.get() == 0:
4373 elif ADC_Mux_Mode.get() == 2:
4374 VBuffA.append((ADsignal1[index][0][1])/1024.0)
4375 VBuffA.append((ADsignal1[index][1][0])/1024.0)
4377 IBuffB.append( ((ADsignal1[index][0][0])/4096.0)-0.5 )
4378 IBuffB.append( ((ADsignal1[index][1][1])/4096.0)-0.5 )
4380 if Alternate_Sweep_Mode.get() == 0:
4385 elif ADC_Mux_Mode.get() == 3:
4386 VBuffB.append((ADsignal1[index][0][0])/1024.0)
4387 VBuffB.append((ADsignal1[index][1][1])/1024.0)
4389 IBuffA.append( ((ADsignal1[index][0][1])/4096.0)-0.5 )
4390 IBuffA.append( ((ADsignal1[index][1][0])/4096.0)-0.5 )
4392 if Alternate_Sweep_Mode.get() == 0:
4397 elif ADC_Mux_Mode.get() == 4:
4398 VBuffA.append(ADsignal1[index][0][0])
4399 VBuffA.append(ADsignal1[index][1][1])
4400 IBuffA.append(ADsignal1[index][0][1])
4401 IBuffA.append(ADsignal1[index][1][0])
4402 if Alternate_Sweep_Mode.get() == 0:
4407 elif ADC_Mux_Mode.get() == 5:
4408 VBuffB.append(ADsignal1[index][0][1])
4409 VBuffB.append(ADsignal1[index][1][0])
4410 IBuffB.append(ADsignal1[index][0][0])
4411 IBuffB.append(ADsignal1[index][1][1])
4412 if Alternate_Sweep_Mode.get() == 0:
4418 VBuffA.append(ADsignal1[index][0][0])
4419 IBuffA.append(ADsignal1[index][0][1])
4420 VBuffB.append(ADsignal1[index][1][0])
4421 IBuffB.append(ADsignal1[index][1][1])
4422 index = index + increment
4424 if Alternate_Sweep_Mode.get() == 1
and Two_X_Sample.get() == 1:
4427 while index < SHOWsamples:
4429 index = index + increment
4432 while index < SHOWsamples:
4434 index = index + increment
4437 while index < SHOWsamples:
4439 index = index + increment
4442 while index < SHOWsamples:
4444 index = index + increment
4446 if ADC_Mux_Mode.get() == 0:
4447 VBuffA = numpy.array(VBuffA)
4448 VBuffB = numpy.array(VBuffB)
4449 VBuffA = (VBuffA - InOffA) * InGainA
4450 VBuffB = (VBuffB - InOffB) * InGainB
4452 Last_ADC_Mux_Mode = 0
4453 elif ADC_Mux_Mode.get() == 1:
4454 IBuffA = numpy.array(IBuffA) * 1000
4455 IBuffB = numpy.array(IBuffB) * 1000
4456 IBuffA = (IBuffA - CurOffA) * CurGainA
4457 IBuffB = (IBuffB - CurOffB) * CurGainB
4458 ADC_Mux_Mode.set(Last_ADC_Mux_Mode)
4459 elif ADC_Mux_Mode.get() == 4:
4460 VBuffA = numpy.array(VBuffA)
4461 IBuffA = numpy.array(IBuffA) * 1000
4462 IBuffA = (IBuffA - CurOffA) * CurGainA
4463 VBuffA = (VBuffA - InOffA) * InGainA
4465 Last_ADC_Mux_Mode = 4
4466 elif ADC_Mux_Mode.get() == 5:
4467 VBuffB = numpy.array(VBuffB)
4468 VBuffB = (VBuffB - InOffB) * InGainB
4469 IBuffB = numpy.array(IBuffB) * 1000
4470 IBuffB = (IBuffB - CurOffB) * CurGainB
4472 Last_ADC_Mux_Mode = 5
4476 VBuffA = numpy.array(VBuffA)
4477 VBuffB = numpy.array(VBuffB)
4478 IBuffA = numpy.array(IBuffA) * 1000
4479 IBuffB = numpy.array(IBuffB) * 1000
4480 VBuffA = (VBuffA - InOffA) * InGainA
4481 VBuffB = (VBuffB - InOffB) * InGainB
4482 IBuffA = (IBuffA - CurOffA) * CurGainA
4483 IBuffB = (IBuffB - CurOffB) * CurGainB
4485 SHOWsamples = len(VBuffA)
4487 if ETSDisp.get() > 0:
4488 baseFreq = SAMPLErate/DivX
4496 FMul = float(eval(FminEntry.get()))
4499 FMulXEntry.delete(0,END)
4500 FMulXEntry.insert(0, int(FMul))
4503 FMulXEntry.delete(0,END)
4504 FMulXEntry.insert(0, int(FMul))
4506 FMulXEntry.delete(0,END)
4507 FMulXEntry.insert(0, int(FMul))
4508 Fmin = baseFreq * FMul
4509 FminE = float(SAMPLErate + FOff)
4510 Samples_Cycle = SAMPLErate/FminE
4512 tot_cycles = int((MulX*100)/Samples_Cycle)
4513 tot_cycles = tot_cycles + 0.1
4514 ETSrecord = int((MulX*50)/Samples_Cycle)
4515 if tot_cycles > SHOWsamples:
4516 tot_cycles = SHOWsamples-1
4518 while index < SHOWsamples:
4519 Ipart, Dpart = divmod( index*Samples_Cycle, 1)
4520 IndexValue = int(tot_cycles * Dpart)
4521 if IndexValue > SHOWsamples:
4522 IndexValue = SHOWsamples-1
4523 if IndexValue > tot_cycles:
4524 IndexValue = tot_cycles
4525 if ETSDir.get() == 0:
4526 VAets.append(VBuffA[IndexValue])
4527 VBets.append(VBuffB[IndexValue])
4528 IAets.append(IBuffA[IndexValue])
4529 IBets.append(IBuffB[IndexValue])
4531 VAets.append(VBuffA[int(tot_cycles-IndexValue)])
4532 VBets.append(VBuffB[int(tot_cycles-IndexValue)])
4533 IAets.append(IBuffA[int(tot_cycles-IndexValue)])
4534 IBets.append(IBuffB[int(tot_cycles-IndexValue)])
4537 TimeCorrection = int(SHiftFact )
4542 VBuffA = numpy.array(VBuffA)
4543 VBuffB = numpy.array(VBuffB)
4544 IBuffA = numpy.array(IBuffA)
4545 IBuffB = numpy.array(IBuffB)
4547 TimeCorrection = int(float(eval(ETSts.get())) * TimeCorrection)
4549 TimeCorrection = SHiftFact
4550 if ETSDir.get() == 0:
4551 VBuffB = numpy.roll(VBuffB, TimeCorrection)
4552 IBuffB = numpy.roll(IBuffB, TimeCorrection)
4554 VBuffB = numpy.roll(VBuffB, TimeCorrection)
4555 IBuffB = numpy.roll(IBuffB, TimeCorrection)
4556 SHOWsamples = twoscreens + hldn + hozpos
4558 if CHA_RC_HP.get() == 1
or CHAI_RC_HP.get() == 1:
4560 TC1A = float(cha_TC1Entry.get())
4563 cha_TC1Entry.delete(0,END)
4564 cha_TC1Entry.insert(0, TC1A)
4566 TC1A = CHA_TC1.get()
4568 TC2A = float(cha_TC2Entry.get())
4571 cha_TC2Entry.delete(0,END)
4572 cha_TC2Entry.insert(0, TC2A)
4574 TC2A = CHA_TC2.get()
4577 Gain1A = float(cha_A1Entry.get())
4579 Gain1A = CHA_A1.get()
4581 Gain2A = float(cha_A2Entry.get())
4583 Gain2A = CHA_A2.get()
4588 if CHAI_RC_HP.get() == 1:
4591 if CHB_RC_HP.get() == 1
or CHBI_RC_HP.get() == 1:
4593 TC1B = float(chb_TC1Entry.get())
4596 chb_TC1Entry.delete(0, END)
4597 chb_TC1Entry.insert(0, TC1B)
4599 TC1B = CHB_TC1.get()
4601 TC2B = float(chb_TC2Entry.get())
4604 chb_TC2Entry.delete(0, END)
4605 chb_TC2Entry.insert(0, TC2B)
4607 TC2B = CHB_TC2.get()
4610 Gain1B = float(chb_A1Entry.get())
4612 Gain1B = CHB_A1.get()
4614 Gain2B = float(chb_A2Entry.get())
4616 Gain2B = CHB_A2.get()
4621 if CHBI_RC_HP.get() == 1:
4625 if DigDeSkewA.get() > 0:
4626 Shift = int(BCASkewEntry.get())
4628 VBuffA = numpy.roll(VBuffA, Shift)
4629 if DigDeSkewB.get() > 0:
4630 Shift = int(BCBSkewEntry.get())
4632 VBuffB = numpy.roll(VBuffB, Shift)
4634 if DigFiltA.get() == 1:
4635 if len(DFiltACoef) > 1:
4636 VBuffA = numpy.convolve(VBuffA, DFiltACoef)
4637 if DigFiltB.get() == 1:
4638 if len(DFiltBCoef) > 1:
4639 VBuffB = numpy.convolve(VBuffB, DFiltBCoef)
4642 if ChopMuxMode.get() > 0
and MuxScreenStatus.get() > 0:
4643 if ChopTrig.get() == 1:
4645 if ChopTrig.get() == 2:
4647 if ChopTrig.get() == 3:
4649 if ChopTrig.get() == 4:
4651 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
4653 if ChopMuxMode.get() == 1
and ChopTrig.get() > 0:
4654 LShift = 0 - TRIGGERsample
4655 VBuffMA = numpy.roll(VBuffMA, LShift)
4656 VBuffMB = numpy.roll(VBuffMB, LShift)
4657 VBuffMC = numpy.roll(VBuffMC, LShift)
4658 VBuffMD = numpy.roll(VBuffMD, LShift)
4659 IBuffA = numpy.roll(IBuffA, LShift)
4660 IBuffB = numpy.roll(IBuffB, LShift)
4661 TRIGGERsample = hozpos
4662 if ChopTrig.get() == 1:
4664 if ChopTrig.get() == 2:
4666 if ChopTrig.get() == 3:
4668 if ChopTrig.get() == 4:
4671 if TgInput.get() == 1:
4673 if TgInput.get() == 2:
4675 if TgInput.get() == 3:
4677 if TgInput.get() == 4:
4679 if TgInput.get() == 5:
4681 if Is_Triggered == 0:
4683 if TgInput.get() == 6:
4685 TRIGGERsampleAltA = TRIGGERsample
4687 TRIGGERsampleAltB = TRIGGERsample
4688 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
4690 if TgInput.get() > 0:
4691 LShift = 0 - TRIGGERsample
4692 if TgInput.get() == 6:
4693 LShift = 0 - TRIGGERsampleAltA
4694 VBuffA = numpy.roll(VBuffA, LShift)
4695 IBuffA = numpy.roll(IBuffA, LShift)
4696 LShift = 0 - TRIGGERsampleAltB
4697 VBuffB = numpy.roll(VBuffB, LShift)
4698 IBuffB = numpy.roll(IBuffB, LShift)
4700 VBuffA = numpy.roll(VBuffA, LShift)
4701 VBuffB = numpy.roll(VBuffB, LShift)
4702 IBuffA = numpy.roll(IBuffA, LShift)
4703 IBuffB = numpy.roll(IBuffB, LShift)
4704 TRIGGERsample = hozpos
4706 if DualMuxMode.get() == 0:
4707 VBuffA = VmemoryA + (VBuffA - VmemoryA) / TRACEaverage.get()
4708 IBuffA = ImemoryA + (IBuffA - ImemoryA) / TRACEaverage.get()
4709 if MuxScreenStatus.get() == 0:
4710 VBuffB = VmemoryB + (VBuffB - VmemoryB) / TRACEaverage.get()
4711 IBuffB = ImemoryB + (IBuffB - ImemoryB) / TRACEaverage.get()
4715 if MuxScreenStatus.get() == 0:
4719 if TgInput.get() == 1
or TgInput.get() == 5
or TgInput.get() == 6:
4721 if TgInput.get() == 2:
4723 if TgInput.get() == 3
or TgInput.get() == 5
or TgInput.get() == 6:
4725 if TgInput.get() == 4:
4728 if CHA_RC_HP.get() == 1
or CHB_RC_HP.get() == 1:
4729 Endsample = hldn+onescreen
4731 Endsample = SHOWsamples - 10
4732 if MeasGateStatus.get() == 1:
4733 if (MeasGateRight-MeasGateLeft) > 0:
4734 hldn = int(MeasGateLeft * SAMPLErate/1000) + TRIGGERsample
4735 Endsample = int(MeasGateRight * SAMPLErate/1000) + TRIGGERsample
4736 if Endsample <= hldn:
4737 Endsample = hldn + 2
4739 DCV1 = numpy.mean(VBuffA[hldn:Endsample])
4740 DCV2 = numpy.mean(VBuffB[hldn:Endsample])
4741 DCI1 = numpy.mean(IBuffA[hldn:Endsample])
4742 DCI2 = numpy.mean(IBuffB[hldn:Endsample])
4744 MinV1 = numpy.amin(VBuffA[hldn:Endsample])
4745 MaxV1 = numpy.amax(VBuffA[hldn:Endsample])
4746 MinV2 = numpy.amin(VBuffB[hldn:Endsample])
4747 MaxV2 = numpy.amax(VBuffB[hldn:Endsample])
4748 MinI1 = numpy.amin(IBuffA[hldn:Endsample])
4749 MaxI1 = numpy.amax(IBuffA[hldn:Endsample])
4750 MinI2 = numpy.amin(IBuffB[hldn:Endsample])
4751 MaxI2 = numpy.amax(IBuffB[hldn:Endsample])
4753 SV1 = numpy.sqrt(numpy.mean(numpy.square(VBuffA[hldn:Endsample])))
4754 SI1 = numpy.sqrt(numpy.mean(numpy.square(IBuffA[hldn:Endsample])))
4755 SV2 = numpy.sqrt(numpy.mean(numpy.square(VBuffB[hldn:Endsample])))
4756 SI2 = numpy.sqrt(numpy.mean(numpy.square(IBuffB[hldn:Endsample])))
4757 SVA_B = numpy.sqrt(numpy.mean(numpy.square(VBuffA[hldn:Endsample]-VBuffB[hldn:Endsample])))
4759 if TgInput.get() > 0
and TRACEmodeTime.get() != 1:
4761 LShift = 0 - TRIGGERsample
4762 VBuffA = numpy.roll(VBuffA, LShift)
4763 VBuffB = numpy.roll(VBuffB, LShift)
4764 IBuffA = numpy.roll(IBuffA, LShift)
4765 IBuffB = numpy.roll(IBuffB, LShift)
4766 TRIGGERsample = hozpos
4767 if ChopMuxMode.get() == 1
and ChopTrig.get() > 0
and TRACEmodeTime.get() != 1:
4768 LShift = 0 - TRIGGERsample
4769 VBuffMA = numpy.roll(VBuffMA, LShift)
4770 VBuffMB = numpy.roll(VBuffMB, LShift)
4771 VBuffMC = numpy.roll(VBuffMC, LShift)
4772 VBuffMD = numpy.roll(VBuffMD, LShift)
4773 IBuffA = numpy.roll(IBuffA, LShift)
4774 IBuffB = numpy.roll(IBuffB, LShift)
4775 TRIGGERsample = hozpos
4776 if ChopMuxMode.get() == 1
and TRACEmodeTime.get() == 1:
4779 VBuffMA = VmemoryMuxA + (VBuffMA - VmemoryMuxA) / TRACEaverage.get()
4781 VmemoryMuxA = VBuffMA
4783 VBuffMB = VmemoryMuxB + (VBuffMB - VmemoryMuxB) / TRACEaverage.get()
4785 VmemoryMuxB = VBuffMB
4787 VBuffMC = VmemoryMuxC + (VBuffMC - VmemoryMuxC) / TRACEaverage.get()
4789 VmemoryMuxC = VBuffMC
4791 VBuffMD = VmemoryMuxD + (VBuffMD - VmemoryMuxD) / TRACEaverage.get()
4793 VmemoryMuxD = VBuffMD
4794 if MuxChan > -1
and ChopMuxMode.get() == 0:
4795 if Show_CBA.get() == 1
and MuxChan == 0:
4799 MidVMuxA = (MaxV2+MinV2)/2.0
4800 PPVMuxA = MaxV2-MinV2
4803 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
4806 VBuffMA = VmemoryMuxA + (VBuffMA - VmemoryMuxA) / TRACEaverage.get()
4809 VmemoryMuxA = VBuffMA
4810 if Show_CBB.get() == 1
and MuxChan == 1:
4814 MidVMuxB = (MaxV2+MinV2)/2.0
4815 PPVMuxB = MaxV2-MinV2
4818 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
4821 VBuffMB = VmemoryMuxB + (VBuffMB - VmemoryMuxB) / TRACEaverage.get()
4824 VmemoryMuxB = VBuffMB
4825 if Show_CBC.get() == 1
and MuxChan == 2:
4826 if DualMuxMode.get() == 1 :
4830 MidVMuxC = (MaxV1+MinV1)/2.0
4831 PPVMuxC = MaxV1-MinV1
4838 MidVMuxC = (MaxV2+MinV2)/2.0
4839 PPVMuxC = MaxV2-MinV2
4842 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
4845 VBuffMC = VmemoryMuxC + (VBuffMC - VmemoryMuxC) / TRACEaverage.get()
4848 VmemoryMuxC = VBuffMC
4849 if Show_CBD.get() == 1
and MuxChan == 3:
4850 if DualMuxMode.get() == 1 :
4854 MidVMuxD = (MaxV1+MinV1)/2.0
4855 PPVMuxD = MaxV1-MinV1
4862 MidVMuxD = (MaxV2+MinV2)/2.0
4863 PPVMuxD = MaxV2-MinV2
4866 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
4869 VBuffMD = VmemoryMuxD + (VBuffMD - VmemoryMuxD) / TRACEaverage.get()
4872 VmemoryMuxD = VBuffMD
4874 if TimeDisp.get() > 0:
4876 NumTraces = ShowC1_V.get() + ShowC1_I.get() + ShowC2_V.get() + ShowC2_I.get()
4877 if NumTraces > 2
and AWGSync.get() == 0
and Two_X_Sample.get() == 1:
4878 showwarning(
"WARNING",
"You need to Select only 2 Traces or Enable AWG Sync Mode!")
4882 if XYDisp.get() > 0
and XYScreenStatus.get() > 0:
4884 if SingleShot.get() > 0
and Is_Triggered == 1:
4887 if ManualTrigger.get() == 1:
4889 if MeasureStatus.get() > 0:
4895 global DCV1, DCV2, VBuffA, VBuffB
4903 sum1 += (VBuffA[i]-DCV1)*(VBuffA[i]-DCV1)
4904 sum2 += (VBuffB[i]-DCV2)*(VBuffB[i]-DCV2)
4905 sum12 += (VBuffA[i]-DCV1)*(VBuffB[i]-DCV2)
4907 return math.acos(sum12/math.sqrt(sum1*sum2))*180.0/numpy.pi
4917 global SAMPLErate, Two_X_Sample
4921 if Two_X_Sample.get() == 0:
4922 Delta = 1.0/SAMPLErate
4924 Delta = 0.88/SAMPLErate
4926 Alpha = TC / (TC + Delta)
4930 OutBuff.append( Alpha * (OutBuff[i-1] + InBuff[i] - InBuff[i-1]) )
4932 OutBuff = numpy.array(OutBuff)
4933 OutBuff = InBuff + (OutBuff * Gain)
4942 Delta = 1.0/SAMPLErate
4944 Alpha = Delta / (TC + Delta)
4946 OutBuff.append(Alpha*InBuff[0])
4948 OutBuff.append( OutBuff[i-1] + (Alpha * (InBuff[i] - InBuff[i-1])) )
4950 OutBuff = numpy.array(OutBuff)
4951 OutBuff = (OutBuff * Gain)
4958 result = numpy.empty_like(arr)
4960 result[:num] = fill_value
4961 result[num:] = arr[:-num]
4963 result[num:] = fill_value
4964 result[:num] = arr[-num:]
4972 global ADsignal1, FFTBuffA, FFTBuffB, SMPfft
4973 global AWGSync, AWGAMode, AWGBMode, AWGAShape, AWGAIOMode, AWGBIOMode
4974 global AWGAFreqvalue, AWGBFreqvalue, FStepSync, FSweepSync
4975 global NSteps, LoopNum, FSweepMode, FStep, FBins
4976 global StartFreqEntry, StopFreqEntry, HoldOffentry
4977 global session, CHA, CHB, devx, MaxSamples, discontloop
4978 global RUNstatus, SingleShotSA, FSweepCont, Two_X_Sample, ADC_Mux_Mode
4979 global AWGSAMPLErate, IAScreenStatus, SpectrumScreenStatus, BodeScreenStatus
4980 global NiCScreenStatus, NiCDisp, NqPScreenStatus, NqPDisp
4981 global OverRangeFlagA, OverRangeFlagB, BodeDisp, FreqDisp, IADisp
4982 global DCA, DCB, InOffA, InGainA, InOffB, InGainB
4983 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
4984 global DigFiltA, DFiltACoef, DigFiltB, DFiltBCoef
4985 global BDSweepFile, FileSweepFreq, FileSweepAmpl
4986 global PIO_0, PIO_1, PIO_2, PIO_3
4987 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
4988 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
4989 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
4990 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
4991 global Reset_Freq, AWGAFreqEntry, AWGBFreqEntry, MinigenFout, IASource, IA_Ext_Conf
4993 HalfSAMPLErate = SAMPLErate/2
4996 InOffA = float(eval(CHAVOffsetEntry.get()))
4998 CHAVOffsetEntry.delete(0,END)
4999 CHAVOffsetEntry.insert(0, InOffA)
5001 InGainA = float(eval(CHAVGainEntry.get()))
5003 CHAVGainEntry.delete(0,END)
5004 CHAVGainEntry.insert(0, InGainA)
5006 InOffB = float(eval(CHBVOffsetEntry.get()))
5008 CHBVOffsetEntry.delete(0,END)
5009 CHBVOffsetEntry.insert(0, InOffB)
5011 InGainB = float(eval(CHBVGainEntry.get()))
5013 CHBVGainEntry.delete(0,END)
5014 CHBVGainEntry.insert(0, InGainB)
5016 HoldOff = float(eval(HoldOffentry.get()))
5019 HoldOffentry.delete(0,END)
5020 HoldOffentry.insert(0, HoldOff)
5022 HoldOffentry.delete(0,END)
5023 HoldOffentry.insert(0, HoldOff)
5028 if BodeDisp.get() == 0:
5029 if AWGAShape.get() == 7
and AWGAMode.get() == 0:
5031 elif AWGAShape.get() == 8
and AWGAMode.get() == 0:
5033 elif AWGBShape.get() == 7
and AWGBMode.get() == 0:
5035 elif AWGBShape.get() == 8
and AWGBMode.get() == 0:
5037 if FSweepMode.get() > 0
and BodeDisp.get() > 0:
5038 if BDSweepFile.get() == 0:
5039 if LoopNum.get() <= len(FStep):
5040 FregPoint = FBins[int(FStep[LoopNum.get()-1])]
5042 FregPoint = FBins[FStep[0]]
5044 if LoopNum.get() <= len(FileSweepFreq):
5045 FreqIndex = int((FileSweepFreq[LoopNum.get()-1]*16384)/HalfSAMPLErate)
5046 FregPoint = FBins[FreqIndex]
5047 VRMSAmpl = 10**(FileSweepAmpl[LoopNum.get()-1]/20)
5049 FregPoint = FBins[FileSweepFreq[0]]
5050 VRMSAmpl = 10**(FileSweepAmpl[0]/20)
5051 VMax = 2.5 + (1.414*VRMSAmpl)
5052 VMin = 2.5 - (1.414*VRMSAmpl)
5053 if FSweepMode.get() == 1:
5054 AWGAAmplEntry.delete(0,END)
5055 AWGAAmplEntry.insert(4, VMin)
5056 AWGAOffsetEntry.delete(0,END)
5057 AWGAOffsetEntry.insert(4, VMax)
5058 if FSweepMode.get() == 2:
5059 AWGBAmplEntry.delete(0,END)
5060 AWGBAmplEntry.insert(4, VMin)
5061 AWGBOffsetEntry.delete(0,END)
5062 AWGBOffsetEntry.insert(4, VMax)
5063 if FSweepMode.get() == 1:
5064 AWGAFreqEntry.delete(0,END)
5065 AWGAFreqEntry.insert(4, FregPoint)
5067 if FSweepMode.get() == 2:
5068 AWGBFreqEntry.delete(0,END)
5069 AWGBFreqEntry.insert(4, FregPoint)
5071 if FSweepMode.get() == 3:
5072 MinigenFout.delete(0,END)
5073 MinigenFout.insert(4, FregPoint)
5075 if AWGSync.get() > 0:
5076 if IAScreenStatus.get() > 0
and IASource.get() == 0:
5077 if Two_X_Sample.get() == 1:
5084 hldn = int(HoldOff * 100 )
5085 if hldn > MaxSamples-SMPfft:
5086 hldn = MaxSamples-SMPfft
5087 HoldOffentry.delete(0,END)
5088 HoldOffentry.insert(0, hldn/100)
5091 SHOWsamples = SMPfft + hldn
5092 if BodeDisp.get() > 0:
5093 if FStepSync.get() == 1:
5094 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
5095 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
5096 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
5097 if FStepSync.get() == 2:
5098 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
5099 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
5100 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
5101 if LoopNum.get() == 1
and FSweepSync.get() == 1:
5102 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
5103 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
5104 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
5105 if LoopNum.get() == 1
and FSweepSync.get() == 2:
5106 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
5107 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
5108 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
5109 if AWGScreenStatus.get() == 1:
5110 if IAScreenStatus.get() > 0
and IASource.get() == 0:
5111 if Two_X_Sample.get() == 1:
5116 if AWGSync.get() > 0:
5123 ADsignal1 = devx.get_samples(SHOWsamples)
5127 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
5128 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
5129 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
5130 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
5132 ADsignal1 = devx.read(SHOWsamples, -1,
True)
5135 if session.continuous:
5136 ADsignal1 = devx.read(SHOWsamples, -1,
True)
5138 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
5139 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
5140 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
5141 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
5144 OverRangeFlagA = OverRangeFlagB = 0
5146 if SHOWsamples != len(ADsignal1):
5147 SHOWsamples = len(ADsignal1)
5148 while index < SHOWsamples:
5149 if Two_X_Sample.get() == 1:
5150 if ADC_Mux_Mode.get() == 0:
5151 FFTBuffA.append(ADsignal1[index][0][0])
5152 FFTBuffA.append(ADsignal1[index][1][1])
5153 FFTBuffB.append(ADsignal1[index][0][1])
5154 FFTBuffB.append(ADsignal1[index][1][0])
5156 VAdata = ADsignal1[index][0][0]
5157 FFTBuffA.append(VAdata)
5158 VBdata = ADsignal1[index][1][0]
5159 FFTBuffB.append(VBdata)
5160 if VAdata > 5.0
or VAdata < 0.0:
5163 if VBdata > 5.0
or VBdata < 0.0:
5167 FFTBuffA = numpy.array(FFTBuffA)
5168 FFTBuffB = numpy.array(FFTBuffB)
5169 FFTBuffA = (FFTBuffA - InOffA) * InGainA
5170 FFTBuffB = (FFTBuffB - InOffB) * InGainB
5171 DCA = numpy.average(FFTBuffA)
5172 DCB = numpy.average(FFTBuffB)
5173 if CutDC.get() == 1:
5174 FFTBuffA = FFTBuffA - DCA
5175 FFTBuffB = FFTBuffB - DCB
5177 if CHA_RC_HP.get() == 1:
5179 TC1A = float(cha_TC1Entry.get())
5182 cha_TC1Entry.delete(0,END)
5183 cha_TC1Entry.insert(0, TC1A)
5185 TC1A = CHA_TC1.get()
5187 TC2A = float(cha_TC2Entry.get())
5190 cha_TC2Entry.delete(0,END)
5191 cha_TC2Entry.insert(0, TC2A)
5193 TC2A = CHA_TC2.get()
5196 Gain1A = float(cha_A1Entry.get())
5198 Gain1A = CHA_A1.get()
5200 Gain2A = float(cha_A2Entry.get())
5202 Gain2A = CHA_A2.get()
5206 if CHB_RC_HP.get() == 1:
5208 TC1B = float(chb_TC1Entry.get())
5211 chb_TC1Entry.delete(0, END)
5212 chb_TC1Entry.insert(0, TC1B)
5214 TC1B = CHB_TC1.get()
5216 TC2B = float(chb_TC2Entry.get())
5219 chb_TC2Entry.delete(0, END)
5220 chb_TC2Entry.insert(0, TC2B)
5222 TC2B = CHB_TC2.get()
5225 Gain1B = float(chb_A1Entry.get())
5227 Gain1B = CHB_A1.get()
5229 Gain2B = float(chb_A2Entry.get())
5231 Gain2B = CHB_A2.get()
5236 if DigFiltA.get() == 1:
5237 FFTBuffA = numpy.convolve(FFTBuffA, DFiltACoef)
5238 if DigFiltB.get() == 1:
5239 FFTBuffB = numpy.convolve(FFTBuffB, DFiltBCoef)
5241 if SpectrumScreenStatus.get() > 0
and FreqDisp.get() > 0:
5243 if IAScreenStatus.get() > 0
and IADisp.get() > 0:
5245 if BodeScreenStatus.get() > 0
and BodeDisp.get() > 0:
5247 if NqPScreenStatus.get() > 0
and NqPDisp.get() > 0:
5249 if NiCScreenStatus.get() > 0
and NiCDisp.get() > 0:
5251 if SingleShotSA.get() == 1:
5254 if FSweepMode.get() > 0
and BodeDisp.get() > 0:
5255 LoopNum.set(LoopNum.get() + 1)
5256 if LoopNum.get() > NSteps.get():
5257 if FSweepMode.get() == 1:
5258 AWGAFreqEntry.delete(0,
"end")
5259 AWGAFreqEntry.insert(0, Reset_Freq)
5260 if FSweepMode.get() == 2:
5261 AWGBFreqEntry.delete(0,
"end")
5262 AWGBFreqEntry.insert(0, Reset_Freq)
5265 if FSweepCont.get() == 0:
5270 global VBuffA, VBuffB, IBuffA, IBuffB, HBuffA, HBuffB
5271 global CH1pdvRange, CHAOffset, CH2pdvRange, CHBOffset
5272 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, Xsignal
5273 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
5274 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
5275 global VABase, VATop, VBBase, VBTop
5277 if ShowC1_V.get() == 1
or Xsignal.get() == 6:
5278 CHAGridMax = (5 * CH1pdvRange ) + CHAOffset
5279 CHAGridMin = (-5 * CH1pdvRange ) + CHAOffset
5280 VAMid = (MinV1 + MaxV1)/2
5281 HBuffA = numpy.histogram(VBuffA, bins=5000, range=[CHAGridMin, CHAGridMax] )
5286 if HBuffA[0][b] > HBuffA[0][LowerPeak]
and HBuffA[1][b] < VAMid:
5288 VABase = HBuffA[1][b]
5289 if HBuffA[0][b] > HBuffA[0][UpperPeak]
and HBuffA[1][b] > VAMid:
5291 VATop = HBuffA[1][b]
5293 if ShowC2_V.get() == 1
or Xsignal.get() == 7:
5294 CHBGridMax = (5 * CH2pdvRange ) + CHBOffset
5295 CHBGridMin = (-5 * CH2pdvRange ) + CHBOffset
5296 VBMid = (MinV2 + MaxV2)/2
5297 HBuffB = numpy.histogram(VBuffB, bins=5000, range=[CHBGridMin, CHBGridMax] )
5302 if HBuffB[0][b] > HBuffB[0][LowerPeak]
and HBuffB[1][b] < VBMid:
5304 VBBase = HBuffB[1][b]
5305 if HBuffB[0][b] > HBuffB[0][UpperPeak]
and HBuffB[1][b] > VBMid:
5307 VBTop = HBuffB[1][b]
5311 global HistAsPercent
5313 if askyesno(
"Plot as Percent",
"Plot Histogram as Percent?", parent=xywindow):
5319 global MinV1, MaxV1, MinV2, MaxV2, HoldOff, TRIGGERsample, TgInput, LShift
5320 global ETSrecord, DISsamples
5321 global SHOWsamples, SAMPLErate, CHAperiod, CHAfreq, CHBperiod, CHBfreq
5322 global CHAHW, CHALW, CHADCy, CHBHW, CHBLW, CHBDCy, ShowC1_V, ShowC2_V
5323 global CHABphase, CHBADelayR1, CHBADelayR2, CHBADelayF
5328 hldn = int(HoldOff * SAMPLErate/1000)
5330 if TgInput.get() > 0:
5331 Trace1 = numpy.roll(Trace1, -LShift)
5332 Trace2 = numpy.roll(Trace2, -LShift)
5334 Trace1 = numpy.roll(Trace1, -hldn)
5335 Trace2 = numpy.roll(Trace2, -hldn)
5337 MidV1 = (numpy.amax(Trace1)+numpy.amin(Trace1))/2.0
5338 MidV2 = (numpy.amax(Trace2)+numpy.amin(Trace2))/2.0
5340 MidV1 = (MinV1+MaxV1)/2
5341 MidV2 = (MinV2+MaxV2)/2
5350 Arising = [i
for (i, val)
in enumerate(Trace1)
if val >= MidV1
and Trace1[i-1] < MidV1]
5351 Afalling = [i
for (i, val)
in enumerate(Trace1)
if val <= MidV1
and Trace1[i-1] > MidV1]
5352 AIrising = [i - (Trace1[i] - MidV1)/(Trace1[i] - Trace1[i-1])
for i
in Arising]
5353 AIfalling = [i - (MidV1 - Trace1[i])/(Trace1[i-1] - Trace1[i])
for i
in Afalling]
5355 CHAfreq = SAMPLErate / numpy.mean(numpy.diff(AIrising))
5356 CHAperiod = (numpy.mean(numpy.diff(AIrising)) * 1000.0) / SAMPLErate
5359 Dummy_read = Arising[0]
5362 if len(Arising) > 0
or len(Afalling) > 0:
5373 if AIfalling[0] < AIrising[0]:
5389 if AIfalling[1] < AIrising[1]:
5403 Brising = [i
for (i, val)
in enumerate(Trace2)
if val >= MidV2
and Trace2[i-1] < MidV2]
5404 Bfalling = [i
for (i, val)
in enumerate(Trace2)
if val <= MidV2
and Trace2[i-1] > MidV2]
5405 BIrising = [i - (Trace2[i] - MidV2)/(Trace2[i] - Trace2[i-1])
for i
in Brising]
5406 BIfalling = [i - (MidV2 - Trace2[i])/(Trace2[i-1] - Trace2[i])
for i
in Bfalling]
5408 CHBfreq = SAMPLErate / numpy.mean(numpy.diff(BIrising))
5409 CHBperiod = (numpy.mean(numpy.diff(BIrising)) * 1000.0) / SAMPLErate
5412 Dummy_read = Brising[0]
5415 if len(Brising) > 0
or len(Bfalling) > 0:
5426 if BIfalling[0] < BIrising[0]:
5442 if BIfalling[1] < BIrising[1]:
5449 CHAHW = float(((anf1 - anr1) * 1000.0) / SAMPLErate)
5450 CHALW = float(((anr2 - anf1) * 1000.0) / SAMPLErate)
5451 CHADCy = float(anf1 - anr1) / float(anr2 - anr1) * 100.0
5452 CHBHW = float(((bnf1 - bnr1) * 1000.0) / SAMPLErate)
5453 CHBLW = float(((bnr2 - bnf1) * 1000.0) / SAMPLErate)
5454 CHBDCy = float(bnf1 - bnr1) / float(bnr2 - bnr1) * 100.0
5457 CHBADelayR1 = float((bnr1 - anr1) * 1000.0 / SAMPLErate)
5459 CHBADelayR1 = float((bnr2 - anr1) * 1000.0 / SAMPLErate)
5460 CHBADelayR2 = float((bnr2 - anr2) * 1000.0 / SAMPLErate)
5461 CHBADelayF = float((bnf1 - anf1) * 1000.0 / SAMPLErate)
5463 CHABphase = 360.0*(float((bnr1 - anr1) * 1000.0 / SAMPLErate))/CHAperiod
5467 CHABphase = CHABphase + 360.0
5470 global DX, TRIGGERsample, TRIGGERlevel
5474 DY = TrgBuff[int(n)] - TrgBuff[int(n+1)]
5476 DX = (TRIGGERlevel - TrgBuff[int(n+1)])/DY
5481 global AutoLevel, TgInput, TRIGGERlevel, TRIGGERentry, DX, SAMPLErate, Is_Triggered
5482 global HoldOffentry, HozPossentry, TRIGGERsample, TRACEsize, HozPoss, hozpos
5483 global Trigger_LPF_length, LPFTrigger
5486 TRACEsize = SHOWsamples
5489 if LPFTrigger.get() > 0:
5491 for n
in range(Trigger_LPF_length.get()):
5492 TFiltCoef.append(float(1.0/Trigger_LPF_length.get()))
5493 TFiltCoef = numpy.array(TFiltCoef)
5494 TrgBuff = numpy.convolve(TrgBuff, TFiltCoef)
5496 if len(TrgBuff) == 0:
5499 TrgMin = numpy.amin(TrgBuff)
5503 TrgMax = numpy.amax(TrgBuff)
5508 if AutoLevel.get() == 1:
5509 TRIGGERlevel = (TrgMin + TrgMax)/2
5510 TRIGGERentry.delete(0,
"end")
5511 TRIGGERentry.insert(0,
' {0:.4f} '.format(TRIGGERlevel))
5513 TRIGGERlevel = eval(TRIGGERentry.get())
5515 TRIGGERentry.delete(0,END)
5516 TRIGGERentry.insert(0, TRIGGERlevel)
5519 HoldOff = float(eval(HoldOffentry.get()))
5522 HoldOffentry.delete(0,END)
5523 HoldOffentry.insert(0, HoldOff)
5525 HoldOffentry.delete(0,END)
5526 HoldOffentry.insert(0, HoldOff)
5529 HozPoss = float(eval(HozPossentry.get()))
5531 HozPossentry.delete(0,END)
5532 HozPossentry.insert(0, HozPoss)
5534 hldn = int(HoldOff * SAMPLErate/1000)
5535 hozpos = int(HozPoss * SAMPLErate/1000)
5537 TRIGGERsample = hldn
5539 TRIGGERsample = abs(hozpos)
5541 Nmax = int(TRACEsize / 1.5)
5544 TRIGGERlevel2 = 0.99 * TRIGGERlevel
5545 if TRIGGERlevel2 < TrgMin:
5546 TRIGGERlevel2 = TrgMin
5547 if TRIGGERlevel2 > TrgMax:
5548 TRIGGERlevel2 = TrgMax
5549 ChInput = TrgBuff[int(n)]
5551 while ( ChInput >= TRIGGERlevel2)
and n < Nmax:
5553 ChInput = TrgBuff[int(n)]
5554 while (ChInput <= TRIGGERlevel)
and n < Nmax:
5557 ChInput = TrgBuff[int(n)]
5560 DX = (TRIGGERlevel - Prev)/DY
5563 if TgEdge.get() == 1:
5564 TRIGGERlevel2 = 1.01 * TRIGGERlevel
5565 if TRIGGERlevel2 < TrgMin:
5566 TRIGGERlevel2 = TrgMin
5567 if TRIGGERlevel2 > TrgMax:
5568 TRIGGERlevel2 = TrgMax
5569 ChInput = TrgBuff[int(n)]
5571 while (ChInput <= TRIGGERlevel2)
and n < Nmax:
5573 ChInput = TrgBuff[int(n)]
5574 while (ChInput >= TRIGGERlevel)
and n < Nmax:
5577 ChInput = TrgBuff[int(n)]
5580 DX = (Prev - TRIGGERlevel)/DY
5586 TRIGGERsample = n - 1
5589 TRIGGERsample = 1 + hldn
5597 TRIGGERsample = TRIGGERsample + hozpos
5600 global win2, DigScreenStatus
5602 DigScreenStatus.set(0)
5607 global D0, D1, D2, D3, D4, D5, D6, D7
5608 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
5609 global digin0, digin1, digin2, digin3, digin4, digin5, digin6, digin7
5612 devx.ctrl_transfer( 0x40, D0.get(), PIO_0, 0, 0, 0, 100)
5613 if D0.get() == 0x50:
5614 digin0.configure(text=
"Low", background=
"#00ff00")
5616 digin0.configure(text=
"Hi", background=
"#ff0000")
5618 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_0, 0, 0, 1, 100)
5620 digin0.configure(text=
"Low", background=
"#00ff00")
5622 digin0.configure(text=
"Hi", background=
"#ff0000")
5624 devx.ctrl_transfer( 0x40, D1.get(), PIO_1, 0, 0, 0, 100)
5625 if D1.get() == 0x50:
5626 digin1.configure(text=
"Low", background=
"#00ff00")
5628 digin1.configure(text=
"Hi", background=
"#ff0000")
5630 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
5632 digin1.configure(text=
"Low", background=
"#00ff00")
5634 digin1.configure(text=
"Hi", background=
"#ff0000")
5636 devx.ctrl_transfer( 0x40, D2.get(), PIO_2, 0, 0, 0, 100)
5637 if D2.get() == 0x50:
5638 digin2.configure(text=
"Low", background=
"#00ff00")
5640 digin2.configure(text=
"Hi", background=
"#ff0000")
5642 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
5644 digin2.configure(text=
"Low", background=
"#00ff00")
5646 digin2.configure(text=
"Hi", background=
"#ff0000")
5648 devx.ctrl_transfer( 0x40, D3.get(), PIO_3, 0, 0, 0, 100)
5649 if D3.get() == 0x50:
5650 digin3.configure(text=
"Low", background=
"#00ff00")
5652 digin3.configure(text=
"Hi", background=
"#ff0000")
5654 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
5656 digin3.configure(text=
"Low", background=
"#00ff00")
5658 digin3.configure(text=
"Hi", background=
"#ff0000")
5660 devx.ctrl_transfer( 0x40, D4.get(), PIO_4, 0, 0, 0, 100)
5661 if D4.get() == 0x50:
5662 digin4.configure(text=
"Low", background=
"#00ff00")
5664 digin4.configure(text=
"Hi", background=
"#ff0000")
5666 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
5668 digin4.configure(text=
"Low", background=
"#00ff00")
5670 digin4.configure(text=
"Hi", background=
"#ff0000")
5672 devx.ctrl_transfer( 0x40, D5.get(), PIO_5, 0, 0, 0, 100)
5673 if D5.get() == 0x50:
5674 digin5.configure(text=
"Low", background=
"#00ff00")
5676 digin5.configure(text=
"Hi", background=
"#ff0000")
5678 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
5680 digin5.configure(text=
"Low", background=
"#00ff00")
5682 digin5.configure(text=
"Hi", background=
"#ff0000")
5684 devx.ctrl_transfer( 0x40, D6.get(), PIO_6, 0, 0, 0, 100)
5685 if D6.get() == 0x50:
5686 digin6.configure(text=
"Low", background=
"#00ff00")
5688 digin6.configure(text=
"Hi", background=
"#ff0000")
5690 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
5692 digin6.configure(text=
"Low", background=
"#00ff00")
5694 digin6.configure(text=
"Hi", background=
"#ff0000")
5696 devx.ctrl_transfer( 0x40, D7.get(), PIO_7, 0, 0, 0, 100)
5697 if D7.get() == 0x50:
5698 digin7.configure(text=
"Low", background=
"#00ff00")
5700 digin7.configure(text=
"Hi", background=
"#ff0000")
5702 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
5704 digin7.configure(text=
"Low", background=
"#00ff00")
5706 digin7.configure(text=
"Hi", background=
"#ff0000")
5710 global D0, D1, D2, D3, D4, D5, D6, D7
5711 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
5712 global digin0, digin1, digin2, digin3, digin4, digin5, digin6, digin7
5713 global DigScreenStatus, DacScreenStatus, win2, MuxScreenStatus
5715 if DigScreenStatus.get() == 0
and DacScreenStatus.get() == 0
and MuxScreenStatus.get() == 0:
5716 DigScreenStatus.set(1)
5718 win2.title(
"Dig Out")
5719 win2.resizable(FALSE,FALSE)
5720 win2.protocol(
"WM_DELETE_WINDOW", DestroyDigScreen)
5721 drb1 = Radiobutton(win2, text=
"D0-0", variable=D0, value=0x50, command=sel )
5722 drb1.grid(row=2, column=0, sticky=W)
5723 drb0z = Radiobutton(win2, text=
"D0-Z", variable=D0, value=0, command=sel )
5724 drb0z.grid(row=2, column=1, sticky=W)
5725 drb2 = Radiobutton(win2, text=
"D0-1", variable=D0, value=0x51, command=sel )
5726 drb2.grid(row=2, column=2, sticky=W)
5727 digin0 = Label(win2, text=
"Low", background =
"#00ff00")
5728 digin0.grid(row=2, column=3, sticky=W)
5729 drb3 = Radiobutton(win2, text=
"D1-0", variable=D1, value=0x50, command=sel )
5730 drb3.grid(row=3, column=0, sticky=W)
5731 drb3z = Radiobutton(win2, text=
"D1-Z", variable=D1, value=0, command=sel )
5732 drb3z.grid(row=3, column=1, sticky=W)
5733 drb4 = Radiobutton(win2, text=
"D1-1", variable=D1, value=0x51, command=sel )
5734 drb4.grid(row=3, column=2, sticky=W)
5735 digin1 = Label(win2, text=
"Low", background =
"#00ff00")
5736 digin1.grid(row=3, column=3, sticky=W)
5737 drb5 = Radiobutton(win2, text=
"D2-0", variable=D2, value=0x50, command=sel )
5738 drb5.grid(row=4, column=0, sticky=W)
5739 drb5z = Radiobutton(win2, text=
"D2-Z", variable=D2, value=0, command=sel )
5740 drb5z.grid(row=4, column=1, sticky=W)
5741 drb6 = Radiobutton(win2, text=
"D2-1", variable=D2, value=0x51, command=sel )
5742 drb6.grid(row=4, column=2, sticky=W)
5743 digin2 = Label(win2, text=
"Low", background =
"#00ff00")
5744 digin2.grid(row=4, column=3, sticky=W)
5745 drb7 = Radiobutton(win2, text=
"D3-0", variable=D3, value=0x50, command=sel )
5746 drb7.grid(row=5, column=0, sticky=W)
5747 drb7z = Radiobutton(win2, text=
"D3-Z", variable=D3, value=0, command=sel )
5748 drb7z.grid(row=5, column=1, sticky=W)
5749 drb8 = Radiobutton(win2, text=
"D3-1", variable=D3, value=0x51, command=sel )
5750 drb8.grid(row=5, column=2, sticky=W)
5751 digin3 = Label(win2, text=
"Low", background =
"#00ff00")
5752 digin3.grid(row=5, column=3, sticky=W)
5753 drb9 = Radiobutton(win2, text=
"D4-0", variable=D4, value=0x50, command=sel )
5754 drb9.grid(row=6, column=0, sticky=W)
5755 drb9z = Radiobutton(win2, text=
"D4-Z", variable=D4, value=0, command=sel )
5756 drb9z.grid(row=6, column=1, sticky=W)
5757 drb10 = Radiobutton(win2, text=
"D4-1", variable=D4, value=0x51, command=sel )
5758 drb10.grid(row=6, column=2, sticky=W)
5759 digin4 = Label(win2, text=
"Low", background =
"#00ff00")
5760 digin4.grid(row=6, column=3, sticky=W)
5761 drb11 = Radiobutton(win2, text=
"D5-0", variable=D5, value=0x50, command=sel )
5762 drb11.grid(row=7, column=0, sticky=W)
5763 drb11z = Radiobutton(win2, text=
"D5-Z", variable=D5, value=0, command=sel )
5764 drb11z.grid(row=7, column=1, sticky=W)
5765 drb12 = Radiobutton(win2, text=
"D5-1", variable=D5, value=0x51, command=sel )
5766 drb12.grid(row=7, column=2, sticky=W)
5767 digin5 = Label(win2, text=
"Low", background =
"#00ff00")
5768 digin5.grid(row=7, column=3, sticky=W)
5769 drb13 = Radiobutton(win2, text=
"D6-0", variable=D6, value=0x50, command=sel )
5770 drb13.grid(row=8, column=0, sticky=W)
5771 drb13z = Radiobutton(win2, text=
"D6-Z", variable=D6, value=0, command=sel )
5772 drb13z.grid(row=8, column=1, sticky=W)
5773 drb13 = Radiobutton(win2, text=
"D6-1", variable=D6, value=0x51, command=sel )
5774 drb13.grid(row=8, column=2, sticky=W)
5775 digin6 = Label(win2, text=
"Low", background =
"#00ff00")
5776 digin6.grid(row=8, column=3, sticky=W)
5777 drb14 = Radiobutton(win2, text=
"D7-0", variable=D7, value=0x50, command=sel )
5778 drb14.grid(row=9, column=0, sticky=W)
5779 drb14z = Radiobutton(win2, text=
"D7-Z", variable=D7, value=0, command=sel )
5780 drb14z.grid(row=9, column=1, sticky=W)
5781 drb15 = Radiobutton(win2, text=
"D7-1", variable=D7, value=0x51, command=sel )
5782 drb15.grid(row=9, column=2, sticky=W)
5783 digin7 = Label(win2, text=
"Low", background =
"#00ff00")
5784 digin7.grid(row=9, column=3, sticky=W)
5786 digdismissbutton = Button(win2, text=
"Dismiss", command=DestroyDigScreen)
5787 digdismissbutton.grid(row=10, column=0, sticky=W)
5790 global win1, DacScreenStatus
5792 DacScreenStatus.set(0)
5801 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
5802 devx.ctrl_transfer( 0x40, 0x50, PIO_4, 0, 0, 0, 100)
5803 elif DAC0.get() == 4:
5804 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
5805 devx.ctrl_transfer( 0x40, 0x51, PIO_4, 0, 0, 0, 100)
5806 elif DAC0.get() == 2:
5807 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
5808 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
5809 elif DAC0.get() == 3:
5810 Dval = devx.ctrl_transfer( 0xc0, 0x91, 0, 0, 0, 1, 100)
5811 devx.ctrl_transfer( 0x40, 0x50, PIO_4, 0, 0, 0, 100)
5812 elif DAC0.get() == 5:
5813 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_0, 0, 0, 1, 100)
5814 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
5815 elif DAC0.get() == 7:
5816 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_0, 0, 0, 1, 100)
5817 devx.ctrl_transfer( 0x40, 0x51, PIO_4, 0, 0, 0, 100)
5818 elif DAC0.get() == 8:
5819 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
5820 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
5821 elif DAC0.get() == 6:
5822 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
5823 devx.ctrl_transfer( 0x40, 0x50, PIO_4, 0, 0, 0, 100)
5824 elif DAC0.get() == 9:
5825 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
5826 devx.ctrl_transfer( 0x40, 0x51, PIO_4, 0, 0, 0, 100)
5834 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
5835 devx.ctrl_transfer( 0x40, 0x50, PIO_5, 0, 0, 0, 100)
5836 elif DAC1.get() == 4:
5837 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
5838 devx.ctrl_transfer( 0x40, 0x51, PIO_5, 0, 0, 0, 100)
5839 elif DAC1.get() == 2:
5840 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
5841 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
5842 elif DAC1.get() == 3:
5843 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
5844 devx.ctrl_transfer( 0x40, 0x50, PIO_5, 0, 0, 0, 100)
5845 elif DAC1.get() == 5:
5846 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
5847 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
5848 elif DAC1.get() == 7:
5849 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
5850 devx.ctrl_transfer( 0x40, 0x51, PIO_5, 0, 0, 0, 100)
5851 elif DAC1.get() == 8:
5852 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
5853 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
5854 elif DAC1.get() == 6:
5855 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
5856 devx.ctrl_transfer( 0x40, 0x50, PIO_5, 0, 0, 0, 100)
5857 elif DAC1.get() == 9:
5858 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
5859 devx.ctrl_transfer( 0x40, 0x51, PIO_5, 0, 0, 0, 100)
5867 devx.ctrl_transfer( 0x40, 0x50, PIO_2, 0, 0, 0, 100)
5868 devx.ctrl_transfer( 0x40, 0x50, PIO_6, 0, 0, 0, 100)
5869 elif DAC2.get() == 4:
5870 devx.ctrl_transfer( 0x40, 0x50, PIO_2, 0, 0, 0, 100)
5871 devx.ctrl_transfer( 0x40, 0x51, PIO_6, 0, 0, 0, 100)
5872 elif DAC2.get() == 2:
5873 devx.ctrl_transfer( 0x40, 0x50, PIO_2, 0, 0, 0, 100)
5874 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
5875 elif DAC2.get() == 3:
5876 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
5877 devx.ctrl_transfer( 0x40, 0x50, PIO_6, 0, 0, 0, 100)
5878 elif DAC2.get() == 5:
5879 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
5880 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
5881 elif DAC2.get() == 7:
5882 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
5883 devx.ctrl_transfer( 0x40, 0x51, PIO_6, 0, 0, 0, 100)
5884 elif DAC2.get() == 8:
5885 devx.ctrl_transfer( 0x40, 0x51, PIO_2, 0, 0, 0, 100)
5886 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
5887 elif DAC2.get() == 6:
5888 devx.ctrl_transfer( 0x40, 0x51, PIO_2, 0, 0, 0, 100)
5889 devx.ctrl_transfer( 0x40, 0x50, PIO_6, 0, 0, 0, 100)
5890 elif DAC2.get() == 9:
5891 devx.ctrl_transfer( 0x40, 0x51, PIO_2, 0, 0, 0, 100)
5892 devx.ctrl_transfer( 0x40, 0x51, PIO_6, 0, 0, 0, 100)
5900 devx.ctrl_transfer( 0x40, 0x50, PIO_3, 0, 0, 0, 100)
5901 devx.ctrl_transfer( 0x40, 0x50, PIO_7, 0, 0, 0, 100)
5902 elif DAC3.get() == 4:
5903 devx.ctrl_transfer( 0x40, 0x50, PIO_3, 0, 0, 0, 100)
5904 devx.ctrl_transfer( 0x40, 0x51, PIO_7, 0, 0, 0, 100)
5905 elif DAC3.get() == 2:
5906 devx.ctrl_transfer( 0x40, 0x50, PIO_3, 0, 0, 0, 100)
5907 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
5908 elif DAC3.get() == 3:
5909 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
5910 devx.ctrl_transfer( 0x40, 0x50, PIO_7, 0, 0, 0, 100)
5911 elif DAC3.get() == 5:
5912 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
5913 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
5914 elif DAC3.get() == 7:
5915 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
5916 devx.ctrl_transfer( 0x40, 0x51, PIO_7, 0, 0, 0, 100)
5917 elif DAC3.get() == 8:
5918 devx.ctrl_transfer( 0x40, 0x51, PIO_3, 0, 0, 0, 100)
5919 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
5920 elif DAC3.get() == 6:
5921 devx.ctrl_transfer( 0x40, 0x51, PIO_3, 0, 0, 0, 100)
5922 devx.ctrl_transfer( 0x40, 0x50, PIO_7, 0, 0, 0, 100)
5923 elif DAC3.get() == 9:
5924 devx.ctrl_transfer( 0x40, 0x51, PIO_3, 0, 0, 0, 100)
5925 devx.ctrl_transfer( 0x40, 0x51, PIO_7, 0, 0, 0, 100)
5928 global DAC0, DAC1, DAC2, DAC3, SWRev, RevDate
5929 global DacScreenStatus, DigScreenStatus, win1, MuxScreenStatus
5931 if DacScreenStatus.get() == 0
and DigScreenStatus.get() == 0
and MuxScreenStatus.get() == 0:
5932 DacScreenStatus.set(1)
5934 win1.title(
"DAC Out "+ SWRev + RevDate)
5935 win1.resizable(FALSE,FALSE)
5936 win1.protocol(
"WM_DELETE_WINDOW", DestroyDacScreen)
5937 DAC0 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel0, length=90)
5938 DAC0.grid(row=0, column=0, sticky=W)
5939 DAC1 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel1, length=90)
5940 DAC1.grid(row=0, column=1, sticky=W)
5941 DAC2 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel2, length=90)
5942 DAC2.grid(row=0, column=2, sticky=W)
5943 DAC3 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel3, length=90)
5944 DAC3.grid(row=0, column=3, sticky=W)
5946 dismissbutton = Button(win1, text=
"Dismiss", command=DestroyDacScreen)
5947 dismissbutton.grid(row=1, column=0, columnspan=4, sticky=W)
5980 global VBuffA, VBuffB, IBuffA, IBuffB
5981 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, MuxScreenStatus, ChopMuxMode, ChopTrig
5982 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
5983 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD
5984 global DBuff0, DBuff1, DBuff2, DBuff3, D0, D1, D2, D3
5985 global D0line, D1line, D2line, D3line
5986 global FFTBuffA, FFTBuffB, FFTwindowshape
5987 global AWGAwaveform, AWGBwaveform
5988 global T1Vline, T2Vline, T1Iline, T2Iline
5989 global TMAVline, TMBVline, TMCVline, TMDVline
5990 global Tmathline, TMXline, TMYline
5991 global MathString, MathAxis, MathXString, MathYString, MathXAxis, MathYAxis
5992 global Triggerline, Triggersymbol, TgInput, TgEdge, HoldOff, HoldOffentry
5993 global X0L, Y0T, GRW, GRH, MouseX, MouseY, MouseCAV, MouseCAI, MouseCBV, MouseCBI
5994 global MouseMuxA, MouseMuxB, MouseMuxC, MouseMuxD
5995 global SHOWsamples, ZOHold, AWGBMode
5996 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
5997 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
5998 global Show_MathX, Show_MathY
5999 global TRACES, TRACESread, RUNstatus
6000 global AutoCenterA, AutoCenterB
6001 global CHAsb, CHBsb, CHAOffset, CHBOffset, CHAIsb, CHBIsb, CHAIOffset, CHBIOffset
6005 global SAMPLErate, SCstart, Two_X_Sample, DISsamples, First_Slow_sweep
6006 global TRIGGERsample, TRACEsize, DX, TRIGGERsampleAltA, TRIGGERsampleAltB
6007 global TRIGGERlevel, TRIGGERentry, AutoLevel
6008 global InOffA, InGainA, InOffB, InGainB
6009 global CurOffA, CurOffB, CurGainA, CurGainB
6010 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
6011 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
6012 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
6013 global CHAVPosEntry, CHAIPosEntry, CHAVPosEntry, CHBIPosEntry
6014 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
6015 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
6016 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
6017 global HozPoss, HozPossentry
6020 if len(VBuffA) < 100
and MuxScreenStatus.get() == 0:
6022 TRACEsize = SHOWsamples
6032 if TIMEdiv < 0.0002:
6035 if AutoCenterA.get() > 0:
6037 CHAVPosEntry.delete(0,END)
6038 CHAVPosEntry.insert(0,
' {0:.2f} '.format(CHAOffset))
6039 if AutoCenterB.get() > 0:
6041 CHBVPosEntry.delete(0,END)
6042 CHBVPosEntry.insert(0,
' {0:.2f} '.format(CHBOffset))
6045 CH1pdvRange = float(eval(CHAsb.get()))
6048 CHAsb.insert(0, CH1pdvRange)
6050 CH2pdvRange = float(eval(CHBsb.get()))
6053 CHBsb.insert(0, CH2pdvRange)
6055 CH1IpdvRange = float(eval(CHAIsb.get()))
6057 CHAIsb.delete(0,END)
6058 CHAIsb.insert(0, CH1IpdvRange)
6060 CH2IpdvRange = float(eval(CHBIsb.get()))
6062 CHBIsb.delete(0,END)
6063 CHBIsb.insert(0, CH2IpdvRange)
6066 CHAOffset = float(eval(CHAVPosEntry.get()))
6068 CHAVPosEntry.delete(0,END)
6069 CHAVPosEntry.insert(0, CHAOffset)
6071 CHAIOffset = float(eval(CHAIPosEntry.get()))
6073 CHAIPosEntry.delete(0,END)
6074 CHAIPosEntry.insert(0, CHAIOffset)
6076 CHBOffset = float(eval(CHBVPosEntry.get()))
6078 CHBVPosEntry.delete(0,END)
6079 CHBVPosEntry.insert(0, CHBOffset)
6081 CHBIOffset = float(eval(CHBIPosEntry.get()))
6083 CHBIPosEntry.delete(0,END)
6084 CHBIPosEntry.insert(0, CHBIOffset)
6086 if CH1pdvRange < 0.001:
6088 if CH2pdvRange < 0.001:
6090 if CH1IpdvRange < 0.1:
6092 if CH2IpdvRange < 0.1:
6096 HoldOff = float(eval(HoldOffentry.get()))
6099 HoldOffentry.delete(0,END)
6100 HoldOffentry.insert(0, HoldOff)
6102 HoldOffentry.delete(0,END)
6103 HoldOffentry.insert(0, HoldOff)
6106 HozPoss = float(eval(HozPossentry.get()))
6108 HozPossentry.delete(0,END)
6109 HozPossentry.insert(0, HozPoss)
6111 hldn = int(HoldOff * SAMPLErate/1000 )
6112 hozpos = int(HozPoss * SAMPLErate/1000 )
6129 if TgInput.get() > 0
or ChopTrig.get() > 0:
6130 SCmin = int(-1 * TRIGGERsample)
6131 SCmax = int(TRACEsize - TRIGGERsample - 0)
6134 SCmax = TRACEsize - 1
6142 Yconv1 = float(GRH/10.0) / CH1pdvRange
6143 Yconv2 = float(GRH/10.0) / CH2pdvRange
6144 YIconv1 = float(GRH/10.0) / CH1IpdvRange
6145 YIconv2 = float(GRH/10.0) / CH2IpdvRange
6146 Xconv1 = float(GRW/10.0) / CH1pdvRange
6147 Xconv2 = float(GRW/10.0) / CH2pdvRange
6148 XIconv1 = float(GRW/10.0) / CH1IpdvRange
6149 XIconv2 = float(GRW/10.0) / CH2IpdvRange
6150 if MuxScreenStatus.get() == 1:
6152 CHMApdvRange = float(eval(CHB_Asb.get()))
6154 CHB_Asb.delete(0,END)
6155 CHB_Asb.insert(0, CHMApdvRange)
6157 CHMBpdvRange = float(eval(CHB_Bsb.get()))
6159 CHB_Bsb.delete(0,END)
6160 CHB_Bsb.insert(0, CHMBpdvRange)
6162 CHMCpdvRange = float(eval(CHB_Csb.get()))
6164 CHB_Csb.delete(0,END)
6165 CHB_Csb.insert(0, CHMCpdvRange)
6167 CHMDpdvRange = float(eval(CHB_Dsb.get()))
6169 CHB_Dsb.delete(0,END)
6170 CHB_Dsb.insert(0, CHMDpdvRange)
6171 YconvMA = float(GRH/10.0) / CHMApdvRange
6172 YconvMB = float(GRH/10.0) / CHMBpdvRange
6173 YconvMC = float(GRH/10.0) / CHMCpdvRange
6174 YconvMD = float(GRH/10.0) / CHMDpdvRange
6176 CHBAOffset = float(eval(CHB_APosEntry.get()))
6178 CHB_APosEntry.delete(0,END)
6179 CHB_APosEntry.insert(0, CHBAOffset)
6181 CHBBOffset = float(eval(CHB_BPosEntry.get()))
6183 CHB_BPosEntry.delete(0,END)
6184 CHB_BPosEntry.insert(0, CHBBOffset)
6186 CHBCOffset = float(eval(CHB_CPosEntry.get()))
6188 CHB_CPosEntry.delete(0,END)
6189 CHB_CPosEntry.insert(0, CHBCOffset)
6191 CHBDOffset = float(eval(CHB_DPosEntry.get()))
6193 CHB_DPosEntry.delete(0,END)
6194 CHB_DPosEntry.insert(0, CHBDOffset)
6195 if MathAxis ==
"V-A":
6197 CHMOffset = CHAOffset
6198 elif MathAxis ==
"V-B":
6200 CHMOffset = CHBOffset
6201 elif MathAxis ==
"I-A":
6203 CHMOffset = CHAIOffset
6204 elif MathAxis ==
"I-B":
6206 CHMOffset = CHBIOffset
6209 CHMOffset = CHAOffset
6211 if MathYAxis ==
"V-A":
6213 CHMYOffset = CHAOffset
6214 elif MathYAxis ==
"V-B":
6216 CHMYOffset = CHBOffset
6217 elif MathYAxis ==
"I-A":
6219 CHMYOffset = CHAIOffset
6220 elif MathYAxis ==
"I-B":
6222 CHMYOffset = CHBIOffset
6225 CHMYOffset = CHAOffset
6227 if MathXAxis ==
"V-A":
6229 CHMXOffset = CHAOffset
6230 elif MathXAxis ==
"V-B":
6232 CHMXOffset = CHBOffset
6233 elif MathXAxis ==
"I-A":
6235 CHMXOffset = CHAIOffset
6236 elif MathXAxis ==
"I-B":
6238 CHMXOffset = CHBIOffset
6241 CHMXOffset = CHAOffset
6243 c1 = GRH / 2.0 + Y0T
6244 c2 = GRH / 2.0 + Y0T
6246 if First_Slow_sweep == 1:
6247 TRACEsize = len(VBuffA)
6253 Dconv = float(GRH/10.0)
6255 DISsamples = SAMPLErate * 10.0 * TIMEdiv / 1000.0
6267 if len(VBuffA) < 4
and len(VBuffB) < 4
and len(IBuffA) < 4
and len(IBuffB) < 4:
6269 t = int(SCstart + TRIGGERsample)
6274 ypv1 = int(c1 - Yconv1 * (VBuffA[t] - CHAOffset))
6275 ypi1 = int(c1 - YIconv1 * (IBuffA[t] - CHAIOffset))
6276 ypv2 = int(c2 - Yconv2 * (VBuffB[t] - CHBOffset))
6277 ypi2 = int(c1 - YIconv2 * (IBuffB[t] - CHBIOffset))
6278 DvY1 = DvY2 = DiY1 = DiY2 = 0
6280 if (DISsamples <= GRW):
6281 Xstep = GRW / DISsamples
6282 if AWGBMode.get() == 2
and Two_X_Sample.get() == 0:
6283 xa = int((Xstep/-2.5) - (Xstep*DX))
6285 xa = 0 - int(Xstep*DX)
6286 x = 0 - int(Xstep*DX)
6291 ypv1 = int(c1 - Yconv1 * (VBuffA[t] - CHAOffset))
6293 ypi1 = int(c1 - YIconv1 * (ytemp - CHAIOffset))
6294 ypv2 = int(c2 - Yconv2 * (VBuffB[t] - CHBOffset))
6295 if MuxScreenStatus.get() == 1:
6296 if len(VBuffMA) > 4:
6297 ypvma = int(c2 - YconvMA * (VBuffMA[t] - CHBAOffset))
6298 if len(VBuffMB) > 4:
6299 ypvmb = int(c2 - YconvMB * (VBuffMB[t] - CHBBOffset))
6300 if len(VBuffMC) > 4:
6301 ypvmc = int(c2 - YconvMC * (VBuffMC[t] - CHBCOffset))
6302 if len(VBuffMD) > 4:
6303 ypvmd = int(c2 - YconvMD * (VBuffMD[t] - CHBDOffset))
6305 ypi2 = int(c1 - YIconv2 * (ytemp - CHBIOffset))
6306 ypm = ypmx = ypmy = GRH / 2.0 + Y0T
6307 if TgInput.get() == 0:
6315 y1 = int(c1 - Yconv1 * (VBuffA[t] - CHAOffset))
6317 yi1 = int(c1 - YIconv1 * (ytemp - CHAIOffset))
6327 if ShowC1_V.get() == 1 :
6328 if ZOHold.get() == 1:
6329 T1Vline.append(int(xa1))
6330 T1Vline.append(int(ypv1))
6331 T1Vline.append(int(xa1))
6332 T1Vline.append(int(y1))
6334 T1Vline.append(int(xa1))
6335 T1Vline.append(int(y1))
6338 if ShowC1_I.get() == 1:
6339 if ZOHold.get() == 1:
6340 T1Iline.append(int(xa1))
6341 T1Iline.append(int(ypi1))
6342 T1Iline.append(int(xa1))
6343 T1Iline.append(int(yi1))
6345 T1Iline.append(int(xa1))
6346 T1Iline.append(int(yi1))
6349 if ShowC2_V.get() == 1:
6350 y1 = int(c2 - Yconv2 * (VBuffB[t] - CHBOffset))
6355 if ZOHold.get() == 1:
6356 T2Vline.append(int(x1))
6357 T2Vline.append(int(ypv2))
6358 T2Vline.append(int(x1))
6359 T2Vline.append(int(y1))
6361 T2Vline.append(int(x1))
6362 T2Vline.append(int(y1))
6365 if Show_CBA.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMA)>4:
6366 y1 = int(c2 - YconvMA * (VBuffMA[t] - CHBAOffset))
6371 if ZOHold.get() == 1:
6372 TMAVline.append(int(x1))
6373 TMAVline.append(int(ypvma))
6374 TMAVline.append(int(x1))
6375 TMAVline.append(int(y1))
6377 TMAVline.append(int(x1))
6378 TMAVline.append(int(y1))
6380 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
6381 Xfine = MouseX - X0L - x
6382 MouseMuxA = ypvma - (y1 - ypvma) * (Xfine/Xstep)
6383 if Show_CBB.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMB)>4:
6384 y1 = int(c2 - YconvMB * (VBuffMB[t] - CHBBOffset))
6389 if ZOHold.get() == 1:
6390 TMBVline.append(int(x1))
6391 TMBVline.append(int(ypvmb))
6392 TMBVline.append(int(x1))
6393 TMBVline.append(int(y1))
6395 TMBVline.append(int(x1))
6396 TMBVline.append(int(y1))
6398 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
6399 Xfine = MouseX - X0L - x
6400 MouseMuxB = ypvmb - (y1 - ypvmb) * (Xfine/Xstep)
6401 if Show_CBC.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMC)>4:
6402 y1 = int(c2 - YconvMC * (VBuffMC[t] - CHBCOffset))
6407 if ZOHold.get() == 1:
6408 TMCVline.append(int(x1))
6409 TMCVline.append(int(ypvmc))
6410 TMCVline.append(int(x1))
6411 TMCVline.append(int(y1))
6413 TMCVline.append(int(x1))
6414 TMCVline.append(int(y1))
6416 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
6417 Xfine = MouseX - X0L - x
6418 MouseMuxC = ypvmc - (y1 - ypvmc) * (Xfine/Xstep)
6419 if Show_CBD.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMD)>4:
6420 y1 = int(c2 - YconvMD * (VBuffMD[t] - CHBDOffset))
6425 if ZOHold.get() == 1:
6426 TMDVline.append(int(x1))
6427 TMDVline.append(int(ypvmd))
6428 TMDVline.append(int(x1))
6429 TMDVline.append(int(y1))
6431 TMDVline.append(int(x1))
6432 TMDVline.append(int(y1))
6434 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
6435 Xfine = MouseX - X0L - x
6436 MouseMuxD = ypvmd - (y1 - ypvmd) * (Xfine/Xstep)
6437 if ShowC2_I.get() == 1:
6439 yi1 = int(c1 - YIconv2 * (ytemp - CHBIOffset))
6444 if (ZOHold.get() == 1):
6445 T2Iline.append(int(x1))
6446 T2Iline.append(int(ypi2))
6447 T2Iline.append(int(x1))
6448 T2Iline.append(int(yi1))
6450 T2Iline.append(int(x1))
6451 T2Iline.append(int(yi1))
6454 if MathTrace.get() > 0:
6455 if MathTrace.get() == 1:
6456 y1 = int(c1 - Yconv1 * (VBuffA[t] + VBuffB[t] - CHAOffset))
6458 elif MathTrace.get() == 2:
6459 y1 = int(c1 - Yconv1 * (VBuffA[t] - VBuffB[t] - CHAOffset))
6461 elif MathTrace.get() == 3:
6462 y1 = int(c2 - Yconv2 * (VBuffB[t] - VBuffA[t] - CHBOffset))
6464 elif MathTrace.get() == 4:
6465 Ypower = VBuffA[t] * IBuffA[t]
6466 ytemp = YIconv1 * (Ypower - CHAIOffset)
6467 y1 = int(c1 - ytemp)
6469 elif MathTrace.get() == 5:
6470 Ypower = VBuffB[t] * IBuffB[t]
6471 ytemp = YIconv2 * (Ypower - CHBIOffset)
6472 y1 = int(c2 - ytemp)
6474 elif MathTrace.get() == 6:
6475 Yohms = VBuffA[t] / (IBuffA[t] / 1000.0)
6476 ytemp = YIconv1 * (Yohms - CHAIOffset)
6477 y1 = int(c1 - ytemp)
6479 elif MathTrace.get() == 7:
6480 Yohms = VBuffB[t] / (IBuffB[t] / 1000.0)
6481 ytemp = YIconv2 * (Yohms - CHBIOffset)
6482 y1 = int(c2 - ytemp)
6484 elif MathTrace.get() == 8:
6485 Ydif = (IBuffA[t] - IBuffB[t])
6486 ytemp = YIconv1 * (Ydif - CHAIOffset)
6487 y1 = int(c2 - ytemp)
6489 elif MathTrace.get() == 9:
6490 Ydif = (IBuffB[t] - IBuffA[t])
6491 ytemp = YIconv2 * (Ydif - CHBIOffset)
6492 y1 = int(c2 - ytemp)
6494 elif MathTrace.get() == 10:
6496 y1 = int(c1 - Yconv2 * ((VBuffB[t] / VBuffA[t]) - CHBOffset))
6498 y1 = int(c1 - Yconv2 * ((VBuffB[t] / 0.000001) - CHBOffset))
6500 elif MathTrace.get() == 11:
6502 Y1 = (IBuffB[t] / IBuffA[t])
6504 Y1 = (IBuffB[t] / 0.000001)
6505 ytemp = YIconv2 * (Y1 - CHBIOffset)
6506 y1 = int(c2 - ytemp)
6508 elif MathTrace.get() == 12:
6511 MathResult = eval(MathString)
6512 MathResult = MathResult - CHMOffset
6513 y1 = int(c1 - YconvM * MathResult)
6522 if ZOHold.get() == 1:
6523 Tmathline.append(int(x1))
6524 Tmathline.append(int(ypm))
6525 Tmathline.append(int(x1))
6526 Tmathline.append(int(y1))
6528 Tmathline.append(int(x1))
6529 Tmathline.append(int(y1))
6531 if Show_MathX.get() > 0:
6533 MathResult = eval(MathXString)
6534 MathResult = MathResult - CHMXOffset
6535 y1 = int(c1 - XconvMxy * MathResult)
6544 if ZOHold.get() == 1:
6545 TMXline.append(int(x1))
6546 TMXline.append(int(ypmx))
6547 TMXline.append(int(x1))
6548 TMXline.append(int(y1))
6550 TMXline.append(int(x1))
6551 TMXline.append(int(y1))
6553 if Show_MathY.get() > 0:
6555 MathResult = eval(MathYString)
6556 MathResult = MathResult - CHMYOffset
6557 y1 = int(c1 - YconvMxy * MathResult)
6566 if ZOHold.get() == 1:
6567 TMYline.append(int(x1))
6568 TMYline.append(int(ypmy))
6569 TMYline.append(int(x1))
6570 TMYline.append(int(y1))
6572 TMYline.append(int(x1))
6573 TMYline.append(int(y1))
6576 yd = int(c1 - (( DBuff0[t]*0.9 - 5 ) * Dconv))
6577 D0line.append(int(x1))
6580 yd = int(c1 - (( DBuff1[t]*0.9 - 4 ) * Dconv))
6581 D1line.append(int(x1))
6584 yd = int(c1 - (( DBuff2[t]*0.9 - 3 ) * Dconv))
6585 D2line.append(int(x1))
6588 yd = int(c1 - (( DBuff3[t]*0.9 - 2 ) * Dconv))
6589 D3line.append(int(x1))
6593 if MouseX - X0L >= x
and MouseX - X0L < (x + Xstep):
6594 Xfine = MouseX - X0L - x
6595 MouseCAV = ypv1 - (DvY1 * (Xfine/Xstep))
6596 MouseCAI = ypi1 - (DiY1 * (Xfine/Xstep))
6597 MouseCBV = ypv2 - (DvY2 * (Xfine/Xstep))
6598 MouseCBI = ypi2 - (DiY2 * (Xfine/Xstep))
6605 Tstep = DISsamples / GRW
6610 t = int(SCstart + TRIGGERsample)
6611 if t > len(VBuffA)-1:
6619 if (t >= len(VBuffA)):
6623 ylo = VBuffA[t] - CHAOffset
6624 ilo = IBuffA[t] - CHAIOffset
6628 while n < (t + Tstep)
and n < TRACEsize:
6629 if ( ShowC1_V.get() == 1 ):
6630 v = VBuffA[t] - CHAOffset
6635 if ( ShowC1_I.get() == 1 ):
6636 i = IBuffA[t] - CHAIOffset
6642 if ( ShowC1_V.get() == 1 ):
6643 ylo = int(c1 - Yconv1 * ylo)
6644 yhi = int(c1 - Yconv1 * yhi)
6653 T1Vline.append(int(x1))
6654 T1Vline.append(int(ylo))
6655 T1Vline.append(int(x1))
6656 T1Vline.append(int(yhi))
6658 if ( ShowC1_I.get() == 1 ):
6659 ilo = int(c1 - YIconv1 * ilo)
6660 ihi = int(c1 - YIconv1 * ihi)
6669 T1Iline.append(int(x1))
6670 T1Iline.append(int(ilo))
6671 T1Iline.append(int(x1))
6672 T1Iline.append(int(ihi))
6674 ylo = VBuffB[t] - CHBOffset
6675 ilo = IBuffB[t] - CHBIOffset
6679 if MuxScreenStatus.get() == 0:
6680 while n < (t + Tstep)
and n < TRACEsize:
6681 if ( ShowC2_V.get() == 1 ):
6682 v = VBuffB[t] - CHBOffset
6687 if ( ShowC2_I.get() == 1 ):
6688 i = IBuffB[t] - CHBIOffset
6694 if ( ShowC2_V.get() == 1 ):
6695 ylo = int(c2 - Yconv2 * ylo)
6696 yhi = int(c2 - Yconv2 * yhi)
6706 T2Vline.append(int(x1))
6707 T2Vline.append(int(ylo))
6708 T2Vline.append(int(x1))
6709 T2Vline.append(int(yhi))
6711 if ( ShowC2_I.get() == 1 ):
6712 ilo = int(c2 - YIconv2 * ilo)
6713 ihi = int(c2 - YIconv2 * ihi)
6722 T2Iline.append(int(x1))
6723 T2Iline.append(int(ilo))
6724 T2Iline.append(int(x1))
6725 T2Iline.append(int(ihi))
6728 if Show_CBA.get() == 1
and len(VBuffMA)>4:
6729 if t < len(VBuffMA):
6730 ylo = VBuffMA[t] - CHBAOffset
6733 while n < (t + Tstep)
and n < len(VBuffMA):
6734 v = VBuffMA[t] - CHBAOffset
6740 ylo = int(c2 - YconvMA * ylo)
6741 yhi = int(c2 - YconvMA * yhi)
6750 TMAVline.append(int(x1))
6751 TMAVline.append(int(ylo))
6752 TMAVline.append(int(x1))
6753 TMAVline.append(int(yhi))
6754 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
6756 if Show_CBB.get() == 1
and len(VBuffMB)>4:
6757 if t < len(VBuffMB):
6758 ylo = VBuffMB[t] - CHBBOffset
6761 while n < (t + Tstep)
and n < len(VBuffMB):
6762 v = VBuffMB[t] - CHBBOffset
6768 ylo = int(c2 - YconvMB * ylo)
6769 yhi = int(c2 - YconvMB * yhi)
6778 TMBVline.append(int(x1))
6779 TMBVline.append(int(ylo))
6780 TMBVline.append(int(x1))
6781 TMBVline.append(int(yhi))
6782 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
6784 if Show_CBC.get() == 1
and len(VBuffMC)>4:
6785 if t < len(VBuffMC):
6786 ylo = VBuffMC[t] - CHBCOffset
6789 while n < (t + Tstep)
and n < len(VBuffMC):
6790 v = VBuffMC[t] - CHBCOffset
6796 ylo = int(c2 - YconvMC * ylo)
6797 yhi = int(c2 - YconvMC * yhi)
6806 TMCVline.append(int(x1))
6807 TMCVline.append(int(ylo))
6808 TMCVline.append(int(x1))
6809 TMCVline.append(int(yhi))
6810 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
6812 if Show_CBD.get() == 1
and len(VBuffMD)>4:
6813 if t < len(VBuffMD):
6814 ylo = VBuffMD[t] - CHBDOffset
6817 while n < (t + Tstep)
and n < len(VBuffMD):
6818 v = VBuffMD[t] - CHBDOffset
6824 ylo = int(c2 - YconvMD * ylo)
6825 yhi = int(c2 - YconvMD * yhi)
6834 TMDVline.append(int(x1))
6835 TMDVline.append(int(ylo))
6836 TMDVline.append(int(x1))
6837 TMDVline.append(int(yhi))
6838 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
6840 if ( ShowC2_I.get() == 1 ):
6841 while n < (t + Tstep)
and n < TRACEsize:
6842 i = IBuffB[t] - CHBIOffset
6848 ilo = int(c2 - YIconv2 * ilo)
6849 ihi = int(c2 - YIconv2 * ihi)
6858 T2Iline.append(int(x1))
6859 T2Iline.append(int(ilo))
6860 T2Iline.append(int(x1))
6861 T2Iline.append(int(ihi))
6862 if MathTrace.get() > 0:
6863 if MathTrace.get() == 1:
6864 y1 = int(c1 - Yconv1 * (VBuffA[t] + VBuffB[t] - CHAOffset))
6866 elif MathTrace.get() == 2:
6867 y1 = int(c1 - Yconv1 * (VBuffA[t] - VBuffB[t] - CHAOffset))
6869 elif MathTrace.get() == 3:
6870 y1 = int(c2 - Yconv2 * (VBuffB[t] - VBuffA[t] - CHBOffset))
6872 elif MathTrace.get() == 4:
6873 Ypower = VBuffA[t] * IBuffA[t]
6874 ytemp = YIconv1 * (Ypower - CHAIOffset)
6875 y1 = int(c1 - ytemp)
6877 elif MathTrace.get() == 5:
6878 Ypower = VBuffB[t] * IBuffB[t]
6879 ytemp = YIconv2 * (Ypower - CHBIOffset)
6880 y1 = int(c2 - ytemp)
6882 elif MathTrace.get() == 6:
6883 Yohms = VBuffA[t] / (IBuffA[t] / 1000.0)
6884 ytemp = YIconv1 * (Yohms- CHAIOffset)
6885 y1 = int(c1 - ytemp)
6887 elif MathTrace.get() == 7:
6888 Yohms = VBuffB[t] / (IBuffB[t] / 1000.0)
6889 ytemp = YIconv2 * (Yohms - CHBIOffset)
6890 y1 = int(c2 - ytemp)
6892 elif MathTrace.get() == 8:
6893 Ydif = (IBuffA[t] - IBuffB[t])
6894 ytemp = YIconv1 * (Ydif - CHAIOffset)
6895 y1 = int(c2 - ytemp)
6897 elif MathTrace.get() == 9:
6898 Ydif = (IBuffB[t] - IBuffA[t])
6899 ytemp = YIconv2 * (Ydif - CHBIOffset)
6900 y1 = int(c2 - ytemp)
6902 elif MathTrace.get() == 10:
6904 y1 = int(c1 - Yconv2 * ((VBuffB[t] / VBuffA[t]) - CHBOffset))
6906 y1 = int(c1 - Yconv2 * ((VBuffB[t] / 0.000001) - CHBOffset))
6907 elif MathTrace.get() == 11:
6909 Y1 = (IBuffB[t] / IBuffA[t])
6911 Y1 = (IBuffB[t] / 0.000001)
6912 ytemp = YIconv2 * (Y1 - CHBIOffset)
6913 y1 = int(c2 - ytemp)
6915 elif MathTrace.get() == 12:
6918 MathResult = eval(MathString)
6919 MathResult = MathResult - CHMOffset
6920 y1 = int(c1 - YconvM * MathResult)
6929 if (ZOHold.get() == 1):
6930 Tmathline.append(int(x1))
6931 Tmathline.append(int(ypm))
6932 Tmathline.append(int(x1))
6933 Tmathline.append(int(y1))
6935 Tmathline.append(int(x1))
6936 Tmathline.append(int(y1))
6938 if Show_MathX.get() > 0:
6940 MathResult = eval(MathXString)
6941 MathResult = MathResult - CHMXOffset
6942 y1 = int(c1 - XconvMxy * MathResult)
6951 if ZOHold.get() == 1:
6952 TMXline.append(int(x1))
6953 TMXline.append(int(ypmx))
6954 TMXline.append(int(x1))
6955 TMXline.append(int(y1))
6957 TMXline.append(int(x1))
6958 TMXline.append(int(y1))
6960 if Show_MathY.get() > 0:
6962 MathResult = eval(MathYString)
6963 MathResult = MathResult - CHMYOffset
6964 y1 = int(c1 - YconvMxy * MathResult)
6973 if ZOHold.get() == 1:
6974 TMYline.append(int(x1))
6975 TMYline.append(int(ypmy))
6976 TMYline.append(int(x1))
6977 TMYline.append(int(y1))
6979 TMYline.append(int(x1))
6980 TMYline.append(int(y1))
6983 if (MouseX - X0L) == x:
6989 if (t > len(VBuffA)):
6997 if TgInput.get() > 0
or ChopTrig.get() > 0:
6998 if TgInput.get() == 1
or TgInput.get() == 5:
7000 ytemp = Yconv1 * (float(TRIGGERlevel)-CHAOffset)
7001 y1 = int(c1 - ytemp)
7002 elif TgInput.get() == 2:
7004 y1 = int(c1 - YIconv1 * (float(TRIGGERlevel) - CHAIOffset))
7005 elif TgInput.get() == 3:
7007 ytemp = Yconv2 * (float(TRIGGERlevel)-CHBOffset)
7008 y1 = int(c2 - ytemp)
7009 elif TgInput.get() == 4:
7011 y1 = int(c2 - YIconv2 * (float(TRIGGERlevel) - CHBIOffset))
7012 elif ChopTrig.get() == 1:
7014 ytemp = YconvMA * (float(TRIGGERlevel)-CHBAOffset)
7015 y1 = int(c1 - ytemp)
7016 elif ChopTrig.get() == 2:
7018 ytemp = YconvMB * (float(TRIGGERlevel)-CHBBOffset)
7019 y1 = int(c1 - ytemp)
7020 elif ChopTrig.get() == 3:
7022 ytemp = YconvMC * (float(TRIGGERlevel)-CHBCOffset)
7023 y1 = int(c1 - ytemp)
7024 elif ChopTrig.get() == 4:
7026 ytemp = YconvMD * (float(TRIGGERlevel)-CHBDOffset)
7027 y1 = int(c1 - ytemp)
7033 Triggerline.append(int(x1-5))
7034 Triggerline.append(int(y1+5))
7035 Triggerline.append(int(x1+5))
7036 Triggerline.append(int(y1))
7037 Triggerline.append(int(x1-5))
7038 Triggerline.append(int(y1-5))
7039 Triggerline.append(int(x1-5))
7040 Triggerline.append(int(y1+5))
7042 if TgEdge.get() == 0:
7048 Triggersymbol.append(int(x1-10))
7049 Triggersymbol.append(int(Ymin+y1))
7050 Triggersymbol.append(int(x1))
7051 Triggersymbol.append(int(Ymin+y1))
7052 Triggersymbol.append(int(x1))
7053 Triggersymbol.append(int(Ymin+y2))
7054 Triggersymbol.append(int(x1+10))
7055 Triggersymbol.append(int(Ymin+y2))
7058 global VBuffA, VBuffB, IBuffA, IBuffB
7059 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
7060 global XYlineVA, XYlineVB, XYlineIA, XYlineIB, XYlineM, XYlineMX, XYlineMY
7061 global MathXString, MathYString, MathAxis, MathXAxis, MathYAxis
7062 global HoldOff, HoldOffentry
7063 global X0LXY, Y0TXY, GRWXY, GRHXY
7064 global YminXY, YmaxXY, XminXY, XmaxXY
7065 global SHOWsamples, ZOHold, AWGBMode
7066 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
7067 global TRACES, TRACESread, RUNstatus
7068 global Xsignal, YsignalVA, YsignalVB, YsignalIA, YsignalIB, YsignalM, YsignalMX, YsignalMY
7069 global CHAsbxy, CHBsbxy, CHAOffset, CHBOffset, CHAIsbxy, CHBIsbxy, CHAIOffset, CHBIOffset
7074 global SCstart, MathString
7075 global TRIGGERsample, TRACEsize, DX
7076 global TRIGGERlevel, TRIGGERentry, AutoLevel
7077 global InOffA, InGainA, InOffB, InGainB
7078 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
7079 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
7080 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
7081 global CHAVPosEntryxy, CHAIPosEntryxy, CHAVPosEntryxy, CHBIPosEntryxy
7082 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
7083 global HozPoss, HozPossentry
7086 if len(VBuffA) < 100:
7088 TRACEsize = SHOWsamples
7090 yloVA = yloVB = yloIA = yloIB = yloM = yloMX = yloMY = 0.0
7094 CH1pdvRange = float(eval(CHAsbxy.get()))
7096 CHAsbxy.delete(0,END)
7097 CHAsbxy.insert(0, CH1pdvRange)
7099 CH2pdvRange = float(eval(CHBsbxy.get()))
7101 CHBsbxy.delete(0,END)
7102 CHBsbxy.insert(0, CH2pdvRange)
7104 CH1IpdvRange = float(eval(CHAIsbxy.get()))
7106 CHAIsbxy.delete(0,END)
7107 CHAIsbxy.insert(0, CH1IpdvRange)
7109 CH2IpdvRange = float(eval(CHBIsbxy.get()))
7111 CHBIsbxy.delete(0,END)
7112 CHBIsbxy.insert(0, CH2IpdvRange)
7115 CHAOffset = float(eval(CHAVPosEntryxy.get()))
7117 CHAVPosEntryxy.delete(0,END)
7118 CHAVPosEntryxy.insert(0, CHAOffset)
7120 CHAIOffset = float(eval(CHAIPosEntryxy.get()))
7122 CHAIPosEntryxy.delete(0,END)
7123 CHAIPosEntryxy.insert(0, CHAIOffset)
7125 CHBOffset = float(eval(CHBVPosEntryxy.get()))
7127 CHBVPosEntry.delete(0,END)
7128 CHBVPosEntry.insert(0, CHBOffset)
7130 CHBIOffset = float(eval(CHBIPosEntryxy.get()))
7132 CHBIPosEntryxy.delete(0,END)
7133 CHBIPosEntryxy.insert(0, CHBIOffset)
7135 if CH1pdvRange < 0.001:
7137 if CH2pdvRange < 0.001:
7139 if CH1IpdvRange < 0.1:
7141 if CH2IpdvRange < 0.1:
7144 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
7145 Yconv2 = float(GRHXY/10.0) / CH2pdvRange
7146 YIconv1 = float(GRHXY/10.0) / CH1IpdvRange
7147 YIconv2 = float(GRHXY/10.0) / CH2IpdvRange
7148 Xconv1 = float(GRWXY/10.0) / CH1pdvRange
7149 Xconv2 = float(GRWXY/10.0) / CH2pdvRange
7150 XIconv1 = float(GRWXY/10.0) / CH1IpdvRange
7151 XIconv2 = float(GRWXY/10.0) / CH2IpdvRange
7153 if MathAxis ==
"V-A":
7155 CHMOffset = CHAOffset
7156 elif MathAxis ==
"V-B":
7158 CHMOffset = CHBOffset
7159 elif MathAxis ==
"I-A":
7161 CHMOffset = CHAIOffset
7162 elif MathAxis ==
"I-B":
7164 CHMOffset = CHBIOffset
7167 CHMYOffset = CHAOffset
7168 if MathYAxis ==
"V-A":
7170 CHMYOffset = CHAOffset
7171 elif MathYAxis ==
"V-B":
7173 CHMYOffset = CHBOffset
7174 elif MathYAxis ==
"I-A":
7176 CHMYOffset = CHAIOffset
7177 elif MathYAxis ==
"I-B":
7179 CHMYOffset = CHBIOffset
7182 CHMYOffset = CHAOffset
7183 if MathXAxis ==
"V-A":
7185 CHMXOffset = CHAOffset
7187 elif MathXAxis ==
"V-B":
7189 CHMXOffset = CHBOffset
7191 elif MathXAxis ==
"I-A":
7193 CHMXOffset = CHAIOffset
7195 elif MathXAxis ==
"I-B":
7197 CHMXOffset = CHBIOffset
7201 CHMXOffset = CHAOffset
7211 t = int(TRIGGERsample)
7212 c1 = GRHXY / 2.0 + Y0TXY
7213 c2 = GRWXY / 2.0 + X0LXY
7214 while (t < TRACEsize):
7216 if Xsignal.get() == 1:
7217 xlo = VBuffA[t] - CHAOffset
7218 xlo = int(c2 + Xconv1 * xlo)
7219 elif Xsignal.get() == 3:
7220 xlo = VBuffB[t] - CHBOffset
7221 xlo = int(c2 + Xconv2 * xlo)
7222 elif Xsignal.get() == 2:
7223 xlo = (IBuffA[t]) - CHAIOffset
7224 xlo = int(c2 + XIconv1 * xlo)
7225 elif Xsignal.get() == 4:
7226 xlo = (IBuffB[t]) - CHBIOffset
7227 xlo = int(c2 + XIconv2 * xlo)
7228 elif Xsignal.get() == 5:
7229 if MathTrace.get() == 2:
7230 xlo = VBuffA[t] - VBuffB[t] - CHAOffset
7231 xlo = int(c2 + Xconv1 * xlo)
7232 elif MathTrace.get() == 3:
7233 xlo = VBuffB[t] - VBuffA[t] - CHBOffset
7234 xlo = int(c2 + Xconv2 * xlo)
7237 MathResult = eval(MathXString)
7238 MathResult = MathResult - CHMXOffset
7239 xlo = int(c2 + XconvMxy * MathResult)
7247 if YsignalVA.get() == 1:
7248 yloVA = VBuffA[t] - CHAOffset
7249 yloVA = int(c1 - Yconv1 * yloVA)
7254 XYlineVA.append(int(xlo))
7255 XYlineVA.append(int(yloVA))
7256 if YsignalVB.get() == 1:
7257 yloVB = VBuffB[t] - CHBOffset
7258 yloVB = int(c1 - Yconv2 * yloVB)
7263 XYlineVB.append(int(xlo))
7264 XYlineVB.append(int(yloVB))
7265 if YsignalIB.get() == 1:
7266 yloIB = (IBuffB[t]) - CHBIOffset
7267 yloIB = int(c1 - YIconv2 * yloIB)
7272 XYlineIB.append(int(xlo))
7273 XYlineIB.append(int(yloIB))
7274 if YsignalIA.get() == 1:
7275 yloIA = (IBuffA[t]) - CHAIOffset
7276 yloIA = int(c1 - YIconv1 * yloIA)
7281 XYlineIA.append(int(xlo))
7282 XYlineIA.append(int(yloIA))
7283 if YsignalM.get() == 1:
7284 if MathTrace.get() == 2:
7285 yloM = VBuffA[t] - VBuffB[t] - CHAOffset
7286 yloM = int(c1 - Yconv1 * yloM)
7287 elif MathTrace.get() == 3:
7288 yloM = VBuffB[t] - VBuffA[t] - CHBOffset
7289 yloM = int(c1 - Yconv2 * yloM)
7292 MathResult = eval(MathString)
7293 MathResult = MathResult - CHMOffset
7294 yloM = int(c1 - YconvM * MathResult)
7301 XYlineM.append(int(xlo))
7302 XYlineM.append(int(yloM))
7303 if YsignalMX.get() == 1:
7305 MathResult = eval(MathXString)
7306 MathResult = MathResult - CHMXOffset
7307 yloMX = int(c1 - YconvMx * MathResult)
7314 XYlineMX.append(int(xlo))
7315 XYlineMX.append(int(yloMX))
7316 if YsignalMY.get() == 1:
7318 MathResult = eval(MathYString)
7319 MathResult = MathResult - CHMYOffset
7320 yloMY = int(c1 - YconvMy * MathResult)
7327 XYlineMY.append(int(xlo))
7328 XYlineMY.append(int(yloMY))
7333 global T1Vline, T2Vline, T1Iline, T2Iline, TXYline
7334 global TMXline, TMYline
7335 global T1VRline, T2VRline, T1IRline, T2IRline
7336 global D0line, D1line, D2line, D3line, D0, D1, D2, D3
7337 global Triggerline, Triggersymbol, Tmathline, TMRline, TXYRline
7338 global VBuffA, VBuffB, IBuffA, IBuffB
7339 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, MuxScreenStatus, ChopMuxMode, ChopTrig
7340 global TMAVline, TMBVline, TMCVline, TMDVline, TMARline, TMBRline, TMCRline, TMDRline
7341 global VmemoryA, VmemoryB, VmemoryA, ImemoryB
7346 global FontSize, EnableHSsampling, ETSDisp, MinigenScreenStatus
7347 global LabelPlotText, PlotLabelText
7348 global MouseX, MouseY, MouseWidget, MouseCAV, MouseCAI, MouseCBV, MouseCBI
7349 global MouseMuxA, MouseMuxB, MouseMuxC, MouseMuxD
7350 global ShowXCur, ShowYCur, TCursor, VCursor
7352 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, Show_MathX, Show_MathY
7353 global ShowRA_V, ShowRA_I, ShowRB_V, ShowRB_I, ShowMath
7354 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MathUnits, MathXUnits, MathYUnits
7355 global ShowRMA, ShowRMB, ShowRMC, ShowRMD
7356 global Xsignal, Ysignal, MathTrace, MathAxis, MathXAxis, MathYAxis
7357 global RUNstatus, SingleShot, ManualTrigger, session
7368 global TIMEdiv, Mulx, DISsamples
7369 global SAMPLErate, contloop, discontloop, HtMulEntry
7370 global TRIGGERsample, TRIGGERlevel, HoldOff, HoldOffentry, TgInput
7371 global COLORgrid, COLORzeroline, COLORtext, COLORtrigger, COLORtrace7, COLORtraceR7
7372 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5, COLORtrace6
7373 global COLORtraceR1, COLORtraceR2, COLORtraceR3, COLORtraceR4, COLORtraceR5, COLORtraceR6
7374 global CANVASwidth, CANVASheight
7375 global TRACErefresh, TRACEmode, TRACEwidth, GridWidth
7376 global ScreenTrefresh, SmoothCurves, Is_Triggered
7377 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2, CHAHW, CHALW, CHADCy, CHAperiod, CHAfreq
7378 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2, CHBHW, CHBLW, CHBDCy, CHBperiod, CHBfreq
7379 global InOffA, InGainA, InOffB, InGainB
7380 global CurOffA, CurOffB, CurGainA, CurGainB
7382 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
7383 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
7384 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
7385 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
7386 global SV1, SI1, SV2, SI2, CHABphase, SVA_B
7387 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1
7388 global MeasDCI1, MeasMinI1, MeasMaxI1, MeasMidI1, MeasPPI1
7389 global MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2, MeasPPV2
7390 global MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2
7391 global MeasRMSV1, MeasRMSI1, MeasRMSV2, MeasRMSI2, MeasPhase, MeasRMSVA_B
7392 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ
7393 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
7394 global AWGAShape, AWGBShape, MeasDiffAB, MeasDiffBA
7395 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
7396 global CHAVPosEntry, CHAIPosEntry, CHAVPosEntry, CHBIPosEntry
7397 global CH1pdvRange, CHAOffset, CH2pdvRange, CHBOffset
7398 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
7399 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
7400 global DacScreenStatus, DigScreenStatus, CHA_RC_HP, CHB_RC_HP
7401 global D0, D1, D2, D3, D4, D5, D6, D7
7402 global DevID, devx, MarkerNum, MarkerScale, MeasGateLeft, MeasGateRight, MeasGateStatus
7403 global HozPoss, HozPossentry, First_Slow_sweep, Roll_Mode
7404 global VABase, VATop, VBBase, VBTop, UserALabel, UserAString, UserBLabel, UserBString
7405 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2, MeasUserA, MeasUserB
7406 global CHBADelayR1, CHBADelayR2, CHBADelayF, MeasDelay
7412 Tstep = (10.0 * TIMEdiv) / GRW
7415 CH1pdvRange = float(eval(CHAsb.get()))
7418 CHAsb.insert(0, CH1pdvRange)
7420 CH2pdvRange = float(eval(CHBsb.get()))
7423 CHBsb.insert(0, CH2pdvRange)
7425 CH1IpdvRange = float(eval(CHAIsb.get()))
7427 CHAIsb.delete(0,END)
7428 CHAIsb.insert(0, CH1IpdvRange)
7430 CH2IpdvRange = float(eval(CHBIsb.get()))
7432 CHBIsb.delete(0,END)
7433 CHBIsb.insert(0, CH2IpdvRange)
7436 CHAOffset = float(eval(CHAVPosEntry.get()))
7438 CHAVPosEntry.delete(0,END)
7439 CHAVPosEntry.insert(0, CHAOffset)
7441 CHAIOffset = float(eval(CHAIPosEntry.get()))
7443 CHAIPosEntry.delete(0,END)
7444 CHAIPosEntry.insert(0, CHAIOffset)
7446 CHBOffset = float(eval(CHBVPosEntry.get()))
7448 CHBVPosEntry.delete(0,END)
7449 CHBVPosEntry.insert(0, CHBOffset)
7451 CHBIOffset = float(eval(CHBIPosEntry.get()))
7453 CHBIPosEntry.delete(0,END)
7454 CHBIPosEntry.insert(0, CHBIOffset)
7456 HoldOff = float(eval(HoldOffentry.get()))
7460 HoldOffentry.delete(0,END)
7461 HoldOffentry.insert(0, HoldOff)
7462 if ETSDisp.get() > 0
or MinigenScreenStatus.get() > 0:
7464 Mulx = float(eval(HtMulEntry.get()))
7469 if EnableHSsampling > 0:
7470 HtMulEntry.delete(0,END)
7471 HtMulEntry.insert(0, 1)
7476 HozPoss = float(eval(HozPossentry.get()))
7478 HozPossentry.delete(0,END)
7479 HozPossentry.insert(0, HozPoss)
7480 if MuxScreenStatus.get() == 1:
7482 CHMApdvRange = float(eval(CHB_Asb.get()))
7484 CHB_Asb.delete(0,END)
7485 CHB_Asb.insert(0, CHMApdvRange)
7487 CHMBpdvRange = float(eval(CHB_Bsb.get()))
7489 CHB_Bsb.delete(0,END)
7490 CHB_Bsb.insert(0, CHMBpdvRange)
7492 CHMCpdvRange = float(eval(CHB_Csb.get()))
7494 CHB_Csb.delete(0,END)
7495 CHB_Csb.insert(0, CHMCpdvRange)
7497 CHMDpdvRange = float(eval(CHB_Dsb.get()))
7499 CHB_Dsb.delete(0,END)
7500 CHB_Dsb.insert(0, CHMDpdvRange)
7501 if CHMApdvRange < 0.001:
7502 CHMApdvRange = 0.001
7503 if CHMBpdvRange < 0.001:
7504 CHMBpdvRange = 0.001
7505 if CHMCpdvRange < 0.001:
7506 CHMCpdvRange = 0.001
7507 if CHMDpdvRange < 0.001:
7508 CHMDpdvRange = 0.001
7510 CHBAOffset = float(eval(CHB_APosEntry.get()))
7512 CHB_APosEntry.delete(0,END)
7513 CHB_APosEntry.insert(0, CHBAOffset)
7515 CHBBOffset = float(eval(CHB_BPosEntry.get()))
7517 CHB_BPosEntry.delete(0,END)
7518 CHB_BPosEntry.insert(0, CHBBOffset)
7520 CHBCOffset = float(eval(CHB_CPosEntry.get()))
7522 CHB_CPosEntry.delete(0,END)
7523 CHB_CPosEntry.insert(0, CHBCOffset)
7525 CHBDOffset = float(eval(CHB_DPosEntry.get()))
7527 CHB_DPosEntry.delete(0,END)
7528 CHB_DPosEntry.insert(0, CHBDOffset)
7530 if CH1pdvRange < 0.001:
7532 if CH2pdvRange < 0.001:
7534 if CH1IpdvRange < 0.1:
7536 if CH2IpdvRange < 0.1:
7538 vt = HoldOff + HozPoss
7539 if ScreenTrefresh.get() == 0:
7549 MathFlag1 = (MathAxis ==
"V-A" and MathTrace.get() == 12)
or (MathXAxis ==
"V-A" and Show_MathX.get() == 1)
or (MathYAxis ==
"V-A" and Show_MathY.get() == 1)
7550 MathFlag2 = (MathAxis ==
"V-B" and MathTrace.get() == 12)
or (MathXAxis ==
"V-B" and Show_MathX.get() == 1)
or (MathYAxis ==
"V-B" and Show_MathY.get() == 1)
7551 MathFlag3 = (MathAxis ==
"I-A" and MathTrace.get() == 12)
or (MathXAxis ==
"I-A" and Show_MathX.get() == 1)
or (MathYAxis ==
"I-A" and Show_MathY.get() == 1)
7552 MathFlag4 = (MathAxis ==
"I-B" and MathTrace.get() == 12)
or (MathXAxis ==
"I-B" and Show_MathX.get() == 1)
or (MathYAxis ==
"I-B" and Show_MathY.get() == 1)
7554 RightOffset = FontSize * 3
7555 LeftOffset = int(FontSize/2)
7556 if (ShowC1_V.get() == 1
or MathTrace.get() == 1
or MathTrace.get() == 2
or MathFlag1):
7557 ca.create_text(x1-LeftOffset, 12, text=
"CA-V", fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize-1 ))
7558 if (ShowC1_I.get() == 1
or MathTrace.get() == 4
or MathTrace.get() == 6
or MathTrace.get() == 8
or MathFlag3):
7559 ca.create_text(x2+LeftOffset, 12, text=
"CA-I", fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize-1 ))
7560 if (ShowC2_V.get() == 1
or MathTrace.get() == 3
or MathTrace.get() == 10
or MathFlag2):
7561 ca.create_text(x1-RightOffset+2, 12, text=
"CB-V", fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize-1 ))
7562 if (ShowC2_I.get() == 1
or MathTrace.get() == 5
or MathTrace.get() == 7
or MathTrace.get() == 9
or MathTrace.get() == 11
or MathFlag4):
7563 ca.create_text(x2+RightOffset+4, 12, text=
"CB-I", fill=COLORtrace4, anchor=
"w", font=(
"arial", FontSize-1 ))
7566 y = Y0T + i * GRH/10.0
7569 ca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
7574 Dline = [x1+k*mg_siz+l*mg_inc,y-5,x1+k*mg_siz+l*mg_inc,y+5]
7575 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
7579 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
7581 if (ShowC1_V.get() == 1
or MathTrace.get() == 1
or MathTrace.get() == 2
or MathFlag1):
7582 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
7584 Vaxis_label = str(round(Vaxis_value,3 ))
7585 ca.create_text(x1-LeftOffset, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
7587 if (ShowC1_I.get() == 1
or MathTrace.get() == 4
or MathTrace.get() == 6
or MathTrace.get() == 8
or MathFlag3):
7588 Iaxis_value = 1.0 * (((5-i) * CH1IpdvRange ) + CHAIOffset)
7589 Iaxis_label = str(round(Iaxis_value, 3))
7590 ca.create_text(x2+LeftOffset, y, text=Iaxis_label, fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize ))
7592 if (ShowC2_V.get() == 1
or MathTrace.get() == 3
or MathTrace.get() == 10
or MathFlag2):
7593 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
7594 Vaxis_label = str(round(Vaxis_value, 3))
7595 ca.create_text(x1-RightOffset+2, y, text=Vaxis_label, fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize ))
7597 if (ShowC2_I.get() == 1
or MathTrace.get() == 5
or MathTrace.get() == 7
or MathTrace.get() == 9
or MathTrace.get() == 11
or MathFlag4):
7598 Iaxis_value = 1.0 * (((5-i) * CH2IpdvRange ) + CHBIOffset)
7599 Iaxis_label = str(round(Iaxis_value, 3))
7600 ca.create_text(x2+RightOffset+4, y, text=Iaxis_label, fill=COLORtrace4, anchor=
"w", font=(
"arial", FontSize ))
7601 if MuxScreenStatus.get() == 1:
7602 if Show_CBA.get() == 1:
7603 Vaxis_value = (((5-i) * CHMApdvRange ) + CHBAOffset)
7604 Vaxis_label = str(round(Vaxis_value, 3))
7605 ca.create_text(x1-RightOffset+2, y, text=Vaxis_label, fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize ))
7606 if Show_CBB.get() == 1:
7607 Iaxis_value = 1.0 * (((5-i) * CHMBpdvRange ) + CHBBOffset)
7608 Iaxis_label = str(round(Iaxis_value, 3))
7609 ca.create_text(x2+LeftOffset, y, text=Iaxis_label, fill=COLORtrace6, anchor=
"w", font=(
"arial", FontSize ))
7610 if Show_CBC.get() == 1:
7611 Iaxis_value = 1.0 * (((5-i) * CHMCpdvRange ) + CHBCOffset)
7612 Iaxis_label = str(round(Iaxis_value, 3))
7613 ca.create_text(x2+RightOffset-3, y, text=Iaxis_label, fill=COLORtrace7, anchor=
"w", font=(
"arial", FontSize ))
7614 if Show_CBD.get() == 1:
7615 Iaxis_value = 1.0 * (((5-i) * CHMDpdvRange ) + CHBDOffset)
7616 Iaxis_label = str(round(Iaxis_value, 3))
7617 ca.create_text(x2+RightOffset+10, y, text=Iaxis_label, fill=COLORtrace4, anchor=
"w", font=(
"arial", FontSize ))
7629 x = X0L + i * GRW/10.0
7632 ca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
7637 Dline = [x-5,y1+k*mg_siz+l*mg_inc,x+5,y1+k*mg_siz+l*mg_inc]
7638 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
7642 if Roll_Mode.get() == 0:
7644 axis_value = ((i * vx)+ vt) / 1000.0
7645 axis_label =
' {0:.1f} '.format(axis_value) +
" S"
7646 if vx < 1000
and vx >= 1:
7647 axis_value = (i * vx) + vt
7648 axis_label =
' {0:.1f} '.format(axis_value) +
" mS"
7650 axis_value = ((i * vx) + vt) * 1000.0
7651 axis_label =
' {0:.1f} '.format(axis_value) +
" uS"
7652 ca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
7654 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
7655 if Roll_Mode.get() == 0:
7657 axis_value = ((i * vx)+ vt) / 1000.0
7658 axis_label =
' {0:.1f} '.format(axis_value) +
" S"
7659 if vx < 1000
and vx >= 1:
7660 axis_value = (i * vx) + vt
7661 axis_label =
' {0:.1f} '.format(axis_value) +
" mS"
7663 axis_value = ((i * vx) + vt) * 1000.0
7664 axis_label =
' {0:.1f} '.format(axis_value) +
" uS"
7665 ca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
7669 if Roll_Mode.get() == 0:
7670 if len(Triggerline) > 2:
7671 ca.create_polygon(Triggerline, outline=COLORtrigger, fill=COLORtrigger, width=1)
7672 ca.create_line(Triggersymbol, fill=COLORtrigger, width=GridWidth.get())
7673 if TgInput.get() == 1:
7675 if TgInput.get() == 2:
7677 if TgInput.get() == 3:
7679 if TgInput.get() == 4:
7681 if TgInput.get() == 5:
7682 TgLabel =
"VA or VB"
7683 if TgInput.get() == 6:
7684 TgLabel =
"Alternate"
7685 if ChopTrig.get() == 1:
7687 if ChopTrig.get() == 2:
7689 if ChopTrig.get() == 3:
7691 if ChopTrig.get() == 4:
7693 if Is_Triggered == 1:
7694 TgLabel = TgLabel +
" Triggered"
7696 TgLabel = TgLabel +
" Not Triggered"
7697 if SingleShot.get() > 0:
7698 TgLabel = TgLabel +
" Armed"
7699 x = X0L + (GRW/2) + 12
7700 ca.create_text(x, Ymin-FontSize, text=TgLabel, fill=COLORtrigger, anchor=
"w", font=(
"arial", FontSize ))
7702 if MarkerScale.get() == 0:
7703 Yconv1 = float(GRH/10.0) / CH1pdvRange
7704 Yoffset1 = CHAOffset
7705 COLORmarker = COLORtrace1
7707 if MarkerScale.get() == 1:
7709 Yconv1 = float(GRH/10.0) / CH1pdvRange
7710 Yoffset1 = CHAOffset
7711 COLORmarker = COLORtrace1
7713 if MarkerScale.get() == 2:
7715 Yconv1 = float(GRH/10.0) / CH2pdvRange
7716 Yoffset1 = CHBOffset
7717 COLORmarker = COLORtrace2
7719 if MarkerScale.get() == 3:
7721 Yconv1 = float(GRH/10.0) / CH1IpdvRange
7722 Yoffset1 = CHAIOffset
7723 COLORmarker = COLORtrace3
7725 if MarkerScale.get() == 4:
7727 Yconv1 = float(GRH/10.0) / CH2IpdvRange
7728 Yoffset1 = CHBIOffset
7729 COLORmarker = COLORtrace4
7732 if MarkerScale.get() == 5:
7734 Yconv1 = float(GRH/10.0) / CHMApdvRange
7735 Yoffset1 = CHBAOffset
7736 COLORmarker = COLORtrace2
7738 if MarkerScale.get() == 6:
7740 Yconv1 = float(GRH/10.0) / CHMBpdvRange
7741 Yoffset1 = CHBBOffset
7742 COLORmarker = COLORtrace6
7744 if MarkerScale.get() == 7:
7746 Yconv1 = float(GRH/10.0) / CHMCpdvRange
7747 Yoffset1 = CHBCOffset
7748 COLORmarker = COLORtrace7
7750 if MarkerScale.get() == 8:
7752 Yconv1 = float(GRH/10.0) / CHMDpdvRange
7753 Yoffset1 = CHBDOffset
7754 COLORmarker = COLORtrace4
7757 if ShowTCur.get() > 0:
7758 Dline = [TCursor, Y0T, TCursor, Y0T+GRH]
7759 ca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
7760 Tpoint = ((TCursor-X0L) * Tstep) + vt
7761 Tpoint = Tpoint/Mulx
7763 axis_value = Tpoint / 1000.0
7764 V_label =
' {0:.2f} '.format(axis_value) +
" S"
7765 if Tpoint < 1000
and Tpoint >= 1:
7767 V_label =
' {0:.2f} '.format(axis_value) +
" mS"
7769 axis_value = Tpoint * 1000.0
7770 V_label =
' {0:.2f} '.format(axis_value) +
" uS"
7771 if Roll_Mode.get() == 0:
7772 ca.create_text(TCursor, Y0T+GRH+6, text=V_label, fill=COLORtext, anchor=
"n", font=(
"arial", FontSize ))
7773 if ShowVCur.get() > 0:
7774 Dline = [X0L, VCursor, X0L+GRW, VCursor]
7775 ca.create_line(Dline, dash=(4,3), fill=COLORmarker, width=GridWidth.get())
7777 yvolts = ((VCursor-c1)/Yconv1) - Yoffset1
7778 V1String =
' {0:.3f} '.format(-yvolts)
7779 V_label = V1String + Units
7780 ca.create_text(X0L+GRW+2, VCursor, text=V_label, fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
7781 if ShowTCur.get() == 0
and ShowVCur.get() == 0
and MouseWidget == ca:
7782 if MouseX > X0L
and MouseX < X0L+GRW
and MouseY > Y0T
and MouseY < Y0T+GRH:
7783 Dline = [MouseX, Y0T, MouseX, Y0T+GRH]
7784 ca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
7785 ca.create_oval(MouseX-GridWidth.get(), MouseY-GridWidth.get(), MouseX+GridWidth.get(), MouseY+GridWidth.get(), outline=COLORtrigger, fill=COLORtrigger, width=GridWidth.get())
7786 Tpoint = ((MouseX-X0L) * Tstep) + vt
7787 Tpoint = Tpoint/Mulx
7789 axis_value = Tpoint / 1000.0
7790 V_label =
' {0:.2f} '.format(axis_value) +
" S"
7791 if Tpoint < 1000
and Tpoint >= 1:
7793 V_label =
' {0:.2f} '.format(axis_value) +
" mS"
7795 axis_value = Tpoint * 1000.0
7796 V_label =
' {0:.2f} '.format(axis_value) +
" uS"
7797 if Roll_Mode.get() == 0:
7798 ca.create_text(MouseX, Y0T+GRH+6, text=V_label, fill=COLORtext, anchor=
"n", font=(
"arial", FontSize ))
7799 Dline = [X0L, MouseY, X0L+GRW, MouseY]
7800 ca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
7802 yvolts = ((MouseY-c1)/Yconv1) - Yoffset1
7803 V1String =
' {0:.3f} '.format(-yvolts)
7804 V_label = V1String + Units
7805 ca.create_text(X0L+GRW+2, MouseY, text=V_label, fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
7807 if MeasGateStatus.get() == 1:
7808 LeftGate = X0L + MeasGateLeft / Tstep
7809 RightGate = X0L + MeasGateRight / Tstep
7810 ca.create_line(LeftGate, Y0T, LeftGate, Y0T+GRH, dash=(5,3), width=GridWidth.get(), fill=COLORtrace5)
7811 ca.create_line(RightGate, Y0T, RightGate, Y0T+GRH, dash=(5,3), width=GridWidth.get(), fill=COLORtrace7)
7814 if Roll_Mode.get() == 0:
7815 DT = (MeasGateRight-MeasGateLeft)/Mulx
7819 axis_value = DT / 1000.0
7820 DeltaT =
' {0:.2f} '.format(axis_value) +
" S "
7821 if DT < 1000
and DT >= 1:
7823 DeltaT =
' {0:.2f} '.format(axis_value) +
" mS "
7825 axis_value = DT * 1000.0
7826 DeltaT =
' {0:.2f} '.format(axis_value) +
" uS "
7828 DFreq =
' {0:.3f} '.format(1.0/DT)
7829 V_label =
" Delta T" + DeltaT
7831 V_label = V_label +
", Freq " + DFreq +
" KHz"
7836 if MarkerLoc ==
'UR' or MarkerLoc ==
'ur':
7840 if MarkerLoc ==
'LL' or MarkerLoc ==
'll':
7842 y = Y0T + GRH + 7 - (MarkerNum*10)
7844 if MarkerLoc ==
'LR' or MarkerLoc ==
'lr':
7848 ca.create_text(x, y, text=V_label, fill=COLORtrace5, anchor=Justify, font=(
"arial", FontSize ))
7851 SmoothBool = SmoothCurves.get()
7853 if len(T1Vline) > 4:
7854 ca.create_line(T1Vline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7855 if len(T1Iline) > 4:
7856 ca.create_line(T1Iline, fill=COLORtrace3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7857 if len(T2Vline) > 4:
7858 ca.create_line(T2Vline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7859 if len(T2Iline) > 4:
7860 ca.create_line(T2Iline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7861 if len(Tmathline) > 4
and MathTrace.get() > 0:
7862 ca.create_line(Tmathline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7863 if len(TMXline) > 4 :
7864 ca.create_line(TMXline, fill=COLORtrace6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7865 if len(TMYline) > 4 :
7866 ca.create_line(TMYline, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7867 if MuxScreenStatus.get() == 1:
7868 if len(TMAVline) > 4:
7869 ca.create_line(TMAVline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7870 if len(TMBVline) > 4:
7871 ca.create_line(TMBVline, fill=COLORtrace6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7872 if len(TMCVline) > 4:
7873 ca.create_line(TMCVline, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7874 if len(TMDVline) > 4:
7875 ca.create_line(TMDVline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7876 if ShowRMA.get() == 1
and len(TMARline) > 4:
7877 ca.create_line(TMARline, fill=COLORtraceR2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7878 if ShowRMB.get() == 1
and len(TMBRline) > 4:
7879 ca.create_line(TMBRline, fill=COLORtraceR6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7880 if ShowRMC.get() == 1
and len(TMCRline) > 4:
7881 ca.create_line(TMCRline, fill=COLORtraceR7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7882 if ShowRMD.get() == 1
and len(TMDRline) > 4:
7883 ca.create_line(TMDRline, fill=COLORtraceR4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7884 if ShowRA_V.get() == 1
and len(T1VRline) > 4:
7885 ca.create_line(T1VRline, fill=COLORtraceR1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7886 if ShowRA_I.get() == 1
and len(T1IRline) > 4:
7887 ca.create_line(T1IRline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7888 if ShowRB_V.get() == 1
and len(T2VRline) > 4:
7889 ca.create_line(T2VRline, fill=COLORtraceR2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7890 if ShowRB_I.get() == 1
and len(T2IRline) > 4:
7891 ca.create_line(T2IRline, fill=COLORtraceR4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7892 if ShowMath.get() == 1
and len(TMRline) > 4:
7893 ca.create_line(TMRline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7894 if First_Slow_sweep == 1:
7897 ca.create_line(D0line, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7899 ca.create_line(D1line, fill=COLORtrace6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7901 ca.create_line(D2line, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7903 ca.create_line(D3line, fill=COLORzeroline, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7906 if session.continuous:
7907 sttxt =
"Running Continuous"
7909 sttxt =
"Running Discontinuous"
7910 if TRACEmodeTime.get() == 1:
7911 sttxt = sttxt +
" Averaging"
7912 if ManualTrigger.get() == 1:
7913 sttxt =
"Manual Trigger"
7914 if (RUNstatus.get() == 0)
or (RUNstatus.get() == 3):
7916 if ScreenTrefresh.get() == 1:
7917 sttxt = sttxt +
" Persistance ON"
7919 de = ca.find_enclosed( X0L-1, Y0T+GRH+12, CANVASwidth, Y0T+GRH+100)
7923 de = ca.find_enclosed( X0L-1, -1, CANVASwidth, 20)
7926 if Roll_Mode.get() == 0:
7927 if LabelPlotText.get() > 0:
7928 txt = PlotLabelText +
" Sample rate: " + str(SAMPLErate) +
" " + sttxt
7930 txt =
"Device ID " + DevID[17:31] +
" Sample rate: " + str(SAMPLErate) +
" " + sttxt
7932 if LabelPlotText.get() > 0:
7933 txt = PlotLabelText +
" Rolling Sweep " + sttxt
7935 txt =
"Device ID " + DevID[17:31] +
" Rolling Sweep " + sttxt
7938 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
7941 BoxColor =
"#808080"
7942 if DacScreenStatus.get() == 0
and (DigScreenStatus.get() == 1
or MuxScreenStatus.get() == 1):
7943 if D0.get() == 0
and D4.get() == 0:
7944 Dval = devx.ctrl_transfer( 0xc0, 0x91, 4, 0, 0, 1, 100)
7946 BoxColor =
"#00ff00"
7948 BoxColor =
"#ff0000"
7949 ca.create_rectangle(x2-12, 6, x2, 18, fill=BoxColor)
7951 ca.create_rectangle(x2-12, 6, x2, 18, fill=
"yellow")
7952 if D1.get() == 0
and D5.get() == 0:
7953 Dval = devx.ctrl_transfer( 0xc0, 0x91, 5, 0, 0, 1, 100)
7955 BoxColor =
"#00ff00"
7957 BoxColor =
"#ff0000"
7958 ca.create_rectangle(x2-26, 6, x2-14, 18, fill=BoxColor)
7960 ca.create_rectangle(x2-26, 6, x2-14, 18, fill=
"yellow")
7961 if D2.get() == 0
and D6.get() == 0:
7962 Dval = devx.ctrl_transfer( 0xc0, 0x91, 6, 0, 0, 1, 100)
7964 BoxColor =
"#00ff00"
7966 BoxColor =
"#ff0000"
7967 ca.create_rectangle(x2-40, 6, x2-28, 18, fill=BoxColor)
7969 ca.create_rectangle(x2-40, 6, x2-28, 18, fill=
"yellow")
7970 if D3.get() == 0
and D7.get() == 0:
7971 Dval = devx.ctrl_transfer( 0xc0, 0x91, 7, 0, 0, 1, 100)
7973 BoxColor =
"#00ff00"
7975 BoxColor =
"#ff0000"
7976 ca.create_rectangle(x2-54, 6, x2-42, 18, fill=BoxColor)
7978 ca.create_rectangle(x2-54, 6, x2-42, 18, fill=
"yellow")
7979 ca.create_text(x2-56, 12, text=
"Digital Inputs", anchor=E, fill=COLORtext)
7983 txt =
' {0:.2f} '.format(vx / 1000.0) +
" S/div"
7984 if vx < 1000
and vx >= 1:
7985 txt =
' {0:.2f} '.format(vx) +
" mS/div"
7987 txt =
' {0:.2f} '.format(vx * 1000.0) +
" uS/div"
7991 txt = txt +
"View at "
7993 txt = txt + str(int(vt / 1000.0)) +
" S "
7994 if abs(vt) < 1000
and abs(vt) >= 1:
7995 txt = txt + str(int(vt)) +
" mS "
7997 txt = txt + str(int(vt * 1000.0)) +
" uS "
7999 if ShowC1_V.get() == 1
or ShowC2_V.get() == 1:
8000 if ETSDisp.get() > 0:
8001 FindRisingEdge(VBuffA[:int(DISsamples)],VBuffB[:int(DISsamples)])
8003 if MeasGateStatus.get() == 1:
8004 if (MeasGateRight-MeasGateLeft) > 0:
8005 hldn = int(MeasGateLeft * SAMPLErate/1000) + TRIGGERsample
8006 Endsample = int(MeasGateRight * SAMPLErate/1000) + TRIGGERsample
8007 if Endsample <= hldn:
8008 Endsample = hldn + 2
8012 if ShowC1_V.get() == 1:
8013 if MeasAHW.get() == 1:
8014 txt = txt +
" CA Hi Width = " +
' {0:.3f} '.format(CHAHW/Mulx) +
" mS "
8015 if MeasALW.get() == 1:
8016 txt = txt +
" CA Lo Width = " +
' {0:.3f} '.format(CHALW/Mulx) +
" mS "
8017 if MeasADCy.get() == 1:
8018 txt = txt +
" CA DutyCycle = " +
' {0:.1f} '.format(CHADCy) +
" % "
8019 if MeasAPER.get() == 1:
8020 txt = txt +
" CA Period = " +
' {0:.3f} '.format(CHAperiod/Mulx) +
" mS "
8021 if MeasAFREQ.get() == 1:
8022 txt = txt +
" CA Freq = "
8025 V1String =
' {0:.1f} '.format(ChaF)
8026 txt = txt + str(V1String) +
" Hz "
8027 if ChaF > 1000
and ChaF < 1000000:
8028 V1String =
' {0:.1f} '.format(ChaF/1000)
8029 txt = txt + str(V1String) +
" KHz "
8031 V1String =
' {0:.1f} '.format(ChaF/1000000)
8032 txt = txt + str(V1String) +
" MHz "
8034 if ShowC2_V.get() == 1:
8035 if MeasBHW.get() == 1:
8036 txt = txt +
" CB Hi Width = " +
' {0:.3f} '.format(CHBHW/Mulx) +
" mS "
8037 if MeasBLW.get() == 1:
8038 txt = txt +
" CB Lo Width = " +
' {0:.3f} '.format(CHBLW/Mulx) +
" mS "
8039 if MeasBDCy.get() == 1:
8040 txt = txt +
" CB DutyCycle = " +
' {0:.1f} '.format(CHBDCy) +
" % "
8041 if MeasBPER.get() == 1:
8042 txt = txt +
" CB Period = " +
' {0:.3f} '.format(CHBperiod/Mulx) +
" mS "
8043 if MeasBFREQ.get() == 1:
8044 txt = txt +
" CB Freq = "
8047 V1String =
' {0:.1f} '.format(ChaF)
8048 txt = txt + str(V1String) +
" Hz "
8049 if ChaF > 1000
and ChaF < 1000000:
8050 V1String =
' {0:.1f} '.format(ChaF/1000)
8051 txt = txt + str(V1String) +
" KHz "
8053 V1String =
' {0:.1f} '.format(ChaF/1000000)
8054 txt = txt + str(V1String) +
" MHz "
8056 if MuxScreenStatus.get() == 0:
8057 if MeasPhase.get() == 1:
8058 txt = txt +
" CA-B Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
8059 if MeasDelay.get() == 1:
8060 txt = txt +
" CB-A Delay = " +
' {0:.3f} '.format(CHBADelayR1) +
" mS "
8063 y = Y0T+GRH+int(2.5 *FontSize)
8064 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
8065 if MeasTopV1.get() == 1
or MeasBaseV1.get() == 1
or MeasTopV2.get() == 1
or MeasBaseV2.get() == 1:
8068 if ShowC1_V.get() == 1:
8070 if CHA_RC_HP.get() == 1:
8074 txt = txt + str(CH1pdvRange) +
" V/div"
8075 if MeasDCV1.get() == 1:
8076 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV1)
8077 if MeasMaxV1.get() == 1:
8078 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV1)
8079 if MeasTopV1.get() == 1:
8080 txt = txt +
" Top = " +
' {0:.4f} '.format(VATop)
8081 if MeasMinV1.get() == 1:
8082 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV1)
8083 if MeasBaseV1.get() == 1:
8084 txt = txt +
" Base = " +
' {0:.4f} '.format(VABase)
8085 if MeasMidV1.get() == 1:
8086 MidV1 = (MaxV1+MinV1)/2.0
8087 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV1)
8088 if MeasPPV1.get() == 1:
8090 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV1)
8091 if MeasRMSV1.get() == 1:
8092 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV1)
8093 if MeasRMSVA_B.get() == 1:
8094 txt = txt +
" A-B RMS = " +
' {0:.4f} '.format(SVA_B)
8095 if MeasDiffAB.get() == 1:
8096 txt = txt +
" CA-CB = " +
' {0:.4f} '.format(DCV1-DCV2)
8097 if MeasUserA.get() == 1:
8099 TempValue = eval(UserAString)
8100 V1String =
' {0:.4f} '.format(TempValue)
8103 txt = txt + UserALabel +
" = " + V1String
8104 if (ShowC1_I.get() == 1
and ShowC1_V.get() == 0):
8106 txt = txt + str(CH1IpdvRange) +
" mA/div"
8107 elif (ShowC1_I.get() == 1
and ShowC1_V.get() == 1):
8109 txt = txt + str(CH1IpdvRange) +
" mA/div"
8110 if ShowC1_I.get() == 1:
8111 if MeasDCI1.get() == 1:
8112 V1String =
' {0:.2f} '.format(DCI1)
8113 txt = txt +
" AvgI = " + V1String
8114 if AWGAShape.get() == 0:
8116 Resvalue = (DCV1/DCI1)*1000
8117 txt = txt +
" Res = " +
' {0:.1f} '.format(Resvalue)
8119 txt = txt +
" Res = OverRange"
8120 if MeasMaxI1.get() == 1:
8121 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI1)
8122 if MeasMinI1.get() == 1:
8123 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI1)
8124 if MeasMidI1.get() == 1:
8125 MidI1 = (MaxI1+MinI1)/2.0
8126 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI1)
8127 if MeasPPI1.get() == 1:
8129 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI1)
8130 if MeasRMSI1.get() == 1:
8131 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI1)
8134 y = Y0T+GRH+(4*FontSize)
8135 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
8138 if MuxScreenStatus.get() == 1:
8140 if Show_CBA.get() > 0:
8142 elif Show_CBB.get() > 0:
8144 elif Show_CBC.get() > 0:
8146 elif Show_CBD.get() > 0:
8148 if MeasPhase.get() == 1:
8149 txt = txt +
" CA-Mux Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
8150 if MeasDelay.get() == 1:
8151 txt = txt +
" Mux-CA Delay = " +
' {0:.3f} '.format(CHBADelayR1) +
" mS "
8152 if MeasUserB.get() == 1:
8154 TempValue = eval(UserBString)
8155 V1String =
' {0:.4f} '.format(TempValue)
8158 txt = txt + UserBLabel +
" = " + V1String
8159 if ShowC2_V.get() == 1:
8160 if CHB_RC_HP.get() == 1:
8164 txt = txt + str(CH2pdvRange) +
" V/div"
8165 if MeasDCV2.get() == 1:
8166 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV2)
8167 if MeasMaxV2.get() == 1:
8168 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV2)
8169 if MeasTopV2.get() == 1:
8170 txt = txt +
" Top = " +
' {0:.4f} '.format(VBTop)
8171 if MeasMinV2.get() == 1:
8172 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV2)
8173 if MeasBaseV2.get() == 1:
8174 txt = txt +
" Base = " +
' {0:.4f} '.format(VBBase)
8175 if MeasMidV2.get() == 1:
8176 MidV2 = (MaxV2+MinV2)/2.0
8177 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV2)
8178 if MeasPPV2.get() == 1:
8180 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV2)
8181 if MeasRMSV2.get() == 1:
8182 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV2)
8183 if MeasDiffBA.get() == 1:
8184 txt = txt +
" CB-CA = " +
' {0:.4f} '.format(DCV2-DCV1)
8185 if MeasUserB.get() == 1:
8187 TempValue = eval(UserBString)
8188 V1String =
' {0:.4f} '.format(TempValue)
8191 txt = txt + UserBLabel +
" = " + V1String
8192 if (ShowC2_I.get() == 1
and ShowC2_V.get() == 0):
8194 txt = txt + str(CH2IpdvRange) +
" mA/div"
8195 elif (ShowC2_I.get() == 1
and ShowC2_V.get() == 1):
8197 txt = txt + str(CH2IpdvRange) +
" mA/div"
8198 if ShowC2_I.get() == 1:
8199 if MeasDCI2.get() == 1:
8200 V1String =
' {0:.2f} '.format(DCI2)
8201 txt = txt +
" AvgI = " + V1String
8202 if AWGBShape.get() == 0:
8204 Resvalue = (DCV2/DCI2)*1000
8205 R1String =
' {0:.1f} '.format(Resvalue)
8206 txt = txt +
" Res = " + R1String
8208 txt = txt +
" Res = OverRange"
8209 if MeasMaxI2.get() == 1:
8210 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI2)
8211 if MeasMinI2.get() == 1:
8212 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI2)
8213 if MeasMidI2.get() == 1:
8214 MidI2 = (MaxI2+MinI2)/2.0
8215 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI2)
8216 if MeasPPI2.get() == 1:
8218 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI2)
8219 if MeasRMSI2.get() == 1:
8220 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI2)
8223 y = Y0T+GRH+int(5.5*FontSize)
8224 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
8227 global XYlineVA, XYlineIA, XYlineVB, XYlineIB, XYlineM, XYlineMX, XYlineMY
8228 global Tmathline, TMRline, XYRlineVA, XYRlineIA, XYRlineVB, XYRlineIB, XYRlineM, XYRlineMX, XYRlineMY
8233 global FontSize, LabelPlotText, PlotLabelText
8234 global XYca, MouseX, MouseY, MouseWidget
8235 global ShowXCur, ShowYCur, XCursor, YCursor
8237 global ShowMath, MathUnits, MathXUnits, MathYUnits
8238 global Xsignal, MathAxis, MathXAxis, MathYAxis
8239 global YsignalVA, YsignalIA, YsignalVB, YsignalIB, YsignalM, YsignalMY, YsignalMX
8240 global XYRefAV, XYRefAI, XYRefBV, XYRefBI, XYRefM, XYRefMX, XYRefMY
8241 global RUNstatus, SingleShot, ManualTrigger
8254 global TRIGGERsample, TRIGGERlevel, HoldOff, HoldOffentry
8255 global COLORgrid, COLORzeroline, COLORtext, COLORtrigger, COLORtrace6, COLORtrace7
8256 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5
8257 global COLORtraceR1, COLORtraceR2, COLORtraceR3, COLORtraceR4, COLORtraceR5, COLORtraceR6, COLORtraceR7
8258 global CANVASwidthXY, CANVASheightXY, COLORXmarker, COLORYmarker
8259 global TRACErefresh, TRACEmode, TRACEwidth, GridWidth
8260 global ScreenXYrefresh, SmoothCurves
8261 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2, CHAHW, CHALW, CHADCy, CHAperiod, CHAfreq
8262 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2, CHBHW, CHBLW, CHBDCy, CHBperiod, CHBfreq
8263 global SV1, SI1, SV2, SI2, CHABphase
8264 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1
8265 global MeasDCI1, MeasMinI1, MeasMaxI1, MeasMidI1, MeasPPI1
8266 global MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2, MeasPPV2
8267 global MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2
8268 global MeasRMSV1, MeasRMSI1, MeasRMSV2, MeasRMSI2, MeasPhase
8269 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ
8270 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
8271 global AWGAShape, AWGBShape
8272 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
8273 global CHAVPosEntry, CHAIPosEntry, CHAVPosEntry, CHBIPosEntry
8274 global CH1pdvRange, CHAOffset, CH2pdvRange, CHBOffset
8275 global DacScreenStatus, DigScreenStatus
8276 global D0, D1, D2, D3, D4, D5, D6, D7
8277 global DevID, devx, MarkerNum, MarkerScale
8278 global HozPoss, HozPossentry
8279 global HistAsPercent, VBuffA, VBuffB, HBuffA, HBuffB
8280 global VABase, VATop, VBBase, VBTop, UserALabel, UserAString, UserBLabel, UserBString
8281 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2, MeasUserA, MeasUserB
8284 Ymax = Y0TXY + GRHXY
8285 RightOffset = FontSize * 3
8286 LeftOffset = int(FontSize/2)
8288 InOffA = float(eval(CHAVOffsetEntry.get()))
8290 CHAVOffsetEntry.delete(0,END)
8291 CHAVOffsetEntry.insert(0, InOffA)
8293 InGainA = float(eval(CHAVGainEntry.get()))
8295 CHAVGainEntry.delete(0,END)
8296 CHAVGainEntry.insert(0, InGainA)
8298 InOffB = float(eval(CHBVOffsetEntry.get()))
8300 CHBVOffsetEntry.delete(0,END)
8301 CHBVOffsetEntry.insert(0, InOffB)
8303 InGainB = float(eval(CHBVGainEntry.get()))
8305 CHBVGainEntry.delete(0,END)
8306 CHBVGainEntry.insert(0, InGainB)
8309 CH1pdvRange = float(eval(CHAsbxy.get()))
8311 CHAsbxy.delete(0,END)
8312 CHAsbxy.insert(0, CH1pdvRange)
8314 CH2pdvRange = float(eval(CHBsbxy.get()))
8316 CHBsbxy.delete(0,END)
8317 CHBsbxy.insert(0, CH2pdvRange)
8319 CH1IpdvRange = float(eval(CHAIsbxy.get()))
8321 CHAIsbxy.delete(0,END)
8322 CHAIsbxy.insert(0, CH1IpdvRange)
8324 CH2IpdvRange = float(eval(CHBIsbxy.get()))
8326 CHBIsbxy.delete(0,END)
8327 CHBIsbxy.insert(0, CH2IpdvRange)
8330 CHAOffset = float(eval(CHAVPosEntryxy.get()))
8332 CHAVPosEntryxy.delete(0,END)
8333 CHAVPosEntryxy.insert(0, CHAOffset)
8335 CHAIOffset = float(eval(CHAIPosEntryxy.get()))
8337 CHAIPosEntryxy.delete(0,END)
8338 CHAIPosEntryxy.insert(0, CHAIOffset)
8340 CHBOffset = float(eval(CHBVPosEntryxy.get()))
8342 CHBVPosEntry.delete(0,END)
8343 CHBVPosEntry.insert(0, CHBOffset)
8345 CHBIOffset = float(eval(CHBIPosEntryxy.get()))
8347 CHBIPosEntryxy.delete(0,END)
8348 CHBIPosEntryxy.insert(0, CHBIOffset)
8350 if CH1pdvRange < 0.001:
8352 if CH2pdvRange < 0.001:
8354 if CH1IpdvRange < 0.05:
8356 if CH2IpdvRange < 0.05:
8359 if Xsignal.get() == 6:
8360 CHAIOffset = 5 * CH1IpdvRange
8361 if Xsignal.get() == 7:
8362 CHBIOffset = 5 * CH2IpdvRange
8363 if ScreenXYrefresh.get() == 0:
8374 y = Y0TXY + i * GRHXY/10.0
8377 XYca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
8382 Dline = [x1+k*mg_siz+l*mg_inc,y-5,x1+k*mg_siz+l*mg_inc,y+5]
8383 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
8387 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
8388 if YsignalIA.get() == 1
or Xsignal.get() == 6:
8389 Iaxis_value = 1.0 * (((5-i) * CH1IpdvRange ) + CHAIOffset)
8390 Iaxis_label = str(round(Iaxis_value, 3))
8391 XYca.create_text(x2+LeftOffset, y, text=Iaxis_label, fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize ))
8392 if YsignalIB.get() == 1
or Xsignal.get() == 7:
8393 Iaxis_value = 1.0 * (((5-i) * CH2IpdvRange ) + CHBIOffset)
8394 Iaxis_label = str(round(Iaxis_value, 3))
8395 XYca.create_text(x2+RightOffset, y, text=Iaxis_label, fill=COLORtrace4, anchor=
"w", font=(
"arial", FontSize ))
8396 if YsignalVA.get() == 1:
8397 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
8398 Vaxis_label = str(round(Vaxis_value, 3))
8399 XYca.create_text(x1-LeftOffset, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
8400 if YsignalVB.get() == 1:
8401 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
8402 Vaxis_label = str(round(Vaxis_value, 3))
8403 XYca.create_text(x1-RightOffset, y, text=Vaxis_label, fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize ))
8404 if YsignalM.get() == 1:
8405 TempCOLOR = COLORtrace5
8406 if MathTrace.get() == 2:
8407 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
8408 elif MathTrace.get() == 3:
8409 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
8411 if MathAxis ==
"V-A":
8412 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
8413 TempCOLOR = COLORtrace1
8414 elif MathAxis ==
"V-B":
8415 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
8416 TempCOLOR = COLORtrace2
8417 elif MathAxis ==
"I-A":
8418 Vaxis_value = 1.0 * (((5-i) * CH1IpdvRange ) + CHAIOffset)
8419 TempCOLOR = COLORtrace3
8420 elif MathAxis ==
"I-B":
8421 Vaxis_value = 1.0 * (((5-i) * CH2IpdvRange ) + CHBIOffset)
8422 TempCOLOR = COLORtrace4
8424 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
8425 Vaxis_label = str(round(Vaxis_value, 3))
8426 XYca.create_text(x1-RightOffset, y, text=Vaxis_label, fill=TempCOLOR, anchor=
"e", font=(
"arial", FontSize ))
8427 if YsignalMX.get() == 1:
8428 TempCOLOR = COLORtrace6
8429 if MathXAxis ==
"V-A":
8430 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
8431 TempCOLOR = COLORtrace1
8432 elif MathXAxis ==
"V-B":
8433 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
8434 TempCOLOR = COLORtrace2
8435 elif MathXAxis ==
"I-A":
8436 Vaxis_value = 1.0 * (((5-i) * CH1IpdvRange ) + CHAIOffset)
8437 TempCOLOR = COLORtrace3
8438 elif MathXAxis ==
"I-B":
8439 Vaxis_value = 1.0 * (((5-i) * CH2IpdvRange ) + CHBIOffset)
8440 TempCOLOR = COLORtrace4
8442 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
8443 Vaxis_label = str(round(Vaxis_value, 3))
8444 XYca.create_text(x1-RightOffset, y, text=Vaxis_label, fill=TempCOLOR, anchor=
"e", font=(
"arial", FontSize ))
8445 if YsignalMY.get() == 1:
8446 TempCOLOR = COLORtrace7
8447 if MathYAxis ==
"V-A":
8448 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
8449 TempCOLOR = COLORtrace1
8450 elif MathYAxis ==
"V-B":
8451 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
8452 TempCOLOR = COLORtrace2
8453 elif MathYAxis ==
"I-A":
8454 Vaxis_value = 1.0 * (((5-i) * CH1IpdvRange ) + CHAIOffset)
8455 TempCOLOR = COLORtrace3
8456 elif MathYAxis ==
"I-B":
8457 Vaxis_value = 1.0 * (((5-i) * CH2IpdvRange ) + CHBIOffset)
8458 TempCOLOR = COLORtrace4
8460 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
8461 Vaxis_label = str(round(Vaxis_value, 3))
8462 XYca.create_text(x1-RightOffset, y, text=Vaxis_label, fill=TempCOLOR, anchor=
"e", font=(
"arial", FontSize ))
8472 x = X0LXY + i * GRWXY/10.0
8475 XYca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
8480 Dline = [x-5,y1+k*mg_siz+l*mg_inc,x+5,y1+k*mg_siz+l*mg_inc]
8481 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
8484 if Xsignal.get() == 1
or Xsignal.get() == 6:
8485 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
8486 Vaxis_label = str(round(Vaxis_value, 3))
8487 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace1, anchor=
"n", font=(
"arial", FontSize ))
8488 elif Xsignal.get() == 3
or Xsignal.get() == 7:
8489 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
8490 Vaxis_label = str(round(Vaxis_value, 3))
8491 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace2, anchor=
"n", font=(
"arial", FontSize ))
8492 elif Xsignal.get() == 2:
8493 Iaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
8494 Iaxis_label = str(round(Iaxis_value, 3))
8495 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace3, anchor=
"n", font=(
"arial", FontSize ))
8496 elif Xsignal.get() == 4:
8497 Iaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
8498 Iaxis_label = str(round(Iaxis_value, 3))
8499 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace4, anchor=
"n", font=(
"arial", FontSize ))
8500 elif Xsignal.get() == 5:
8501 TempCOLOR = COLORtrace5
8502 if MathTrace.get() == 2:
8503 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
8504 elif MathTrace.get() == 3:
8505 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
8507 if MathXAxis ==
"V-A":
8508 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
8509 TempCOLOR = COLORtrace1
8510 elif MathXAxis ==
"V-B":
8511 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
8512 TempCOLOR = COLORtrace2
8513 elif MathXAxis ==
"I-A":
8514 Vaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
8515 TempCOLOR = COLORtrace3
8516 elif MathXAxis ==
"I-B":
8517 Vaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
8518 TempCOLOR = COLORtrace4
8520 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
8521 TempCOLOR = COLORtrace5
8522 Vaxis_label = str(round(Vaxis_value, 3))
8523 XYca.create_text(x, y2+3, text=Vaxis_label, fill=TempCOLOR, anchor=
"n", font=(
"arial", FontSize ))
8525 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
8526 if Xsignal.get() == 1
or Xsignal.get() == 6:
8527 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
8528 Vaxis_label = str(round(Vaxis_value, 3))
8529 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace1, anchor=
"n", font=(
"arial", FontSize ))
8530 elif Xsignal.get() == 3
or Xsignal.get() == 7:
8531 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
8532 Vaxis_label = str(round(Vaxis_value, 3))
8533 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace2, anchor=
"n", font=(
"arial", FontSize ))
8534 elif Xsignal.get() == 2:
8535 Iaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
8536 Iaxis_label = str(round(Iaxis_value, 3))
8537 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace3, anchor=
"n", font=(
"arial", FontSize ))
8538 elif Xsignal.get() == 4:
8539 Iaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
8540 Iaxis_label = str(round(Iaxis_value, 3))
8541 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace4, anchor=
"n", font=(
"arial", FontSize ))
8542 elif Xsignal.get() == 5:
8543 TempCOLOR = COLORtrace5
8544 if MathTrace.get() == 2:
8545 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
8546 elif MathTrace.get() == 3:
8547 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
8549 if MathXAxis ==
"V-A":
8550 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
8551 TempCOLOR = COLORtrace1
8552 elif MathXAxis ==
"V-B":
8553 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
8554 TempCOLOR = COLORtrace2
8555 elif MathXAxis ==
"I-A":
8556 Vaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
8557 TempCOLOR = COLORtrace3
8558 elif MathXAxis ==
"I-B":
8559 Vaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
8560 TempCOLOR = COLORtrace4
8562 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
8563 Vaxis_label = str(round(Vaxis_value, 3))
8564 XYca.create_text(x, y2+3, text=Vaxis_label, fill=TempCOLOR, anchor=
"n", font=(
"arial", FontSize ))
8568 if YsignalVA.get() == 1:
8569 if len(XYlineVA) > 4:
8570 XYca.create_line(XYlineVA, fill=COLORtrace1, width=TRACEwidth.get())
8571 if YsignalIA.get() == 1:
8572 if len(XYlineIA) > 4:
8573 XYca.create_line(XYlineIA, fill=COLORtrace3, width=TRACEwidth.get())
8574 if YsignalVB.get() == 1:
8575 if len(XYlineVB) > 4:
8576 XYca.create_line(XYlineVB, fill=COLORtrace2, width=TRACEwidth.get())
8577 if YsignalIB.get() == 1:
8578 if len(XYlineIB) > 4:
8579 XYca.create_line(XYlineIB, fill=COLORtrace4, width=TRACEwidth.get())
8580 if YsignalM.get() == 1:
8581 if len(XYlineM) > 4:
8582 XYca.create_line(XYlineM, fill=COLORtrace5, width=TRACEwidth.get())
8583 if YsignalMX.get() == 1:
8584 if len(XYlineMX) > 4:
8585 XYca.create_line(XYlineMX, fill=COLORtrace6, width=TRACEwidth.get())
8586 if YsignalMY.get() == 1:
8587 if len(XYlineMY) > 4:
8588 XYca.create_line(XYlineMY, fill=COLORtrace7, width=TRACEwidth.get())
8589 if len(XYRlineVA) > 4
and XYRefAV.get() == 1:
8590 XYca.create_line(XYRlineVA, fill=COLORtraceR1, width=TRACEwidth.get())
8591 if len(XYRlineVB) > 4
and XYRefBV.get() == 1:
8592 XYca.create_line(XYRlineVB, fill=COLORtraceR2, width=TRACEwidth.get())
8593 if len(XYRlineIA) > 4
and XYRefAI.get() == 1:
8594 XYca.create_line(XYRlineIA, fill=COLORtraceR3, width=TRACEwidth.get())
8595 if len(XYRlineIB) > 4
and XYRefBI.get() == 1:
8596 XYca.create_line(XYRlineIB, fill=COLORtraceR4, width=TRACEwidth.get())
8597 if len(XYRlineM) > 4
and XYRefM.get() == 1:
8598 XYca.create_line(XYRlineM, fill=COLORtraceR5, width=TRACEwidth.get())
8599 if len(XYRlineMX) > 4
and XYRefMX.get() == 1:
8600 XYca.create_line(XYRlineMX, fill=COLORtraceR6, width=TRACEwidth.get())
8601 if len(XYRlineMY) > 4
and XYRefMY.get() == 1:
8602 XYca.create_line(XYRlineMY, fill=COLORtraceR7, width=TRACEwidth.get())
8604 if Xsignal.get() == 6:
8607 Yconv1 = float(GRHXY/10.0) / CH1IpdvRange
8608 Xconv1 = float(GRWXY/10.0) / CH1pdvRange
8611 c2 = GRWXY / 2.0 + X0LXY
8613 if HistAsPercent == 1:
8614 ylo = float(HBuffA[0][b]) / len(VBuffA)
8618 ylo = int(y1 - (Yconv1 * ylo))
8623 xlo = HBuffA[1][b] - CHAOffset
8624 xlo = int(c2 + Xconv1 * xlo)
8625 Dline = [xlo,y1,xlo,ylo]
8626 XYca.create_line(Dline, fill=COLORtrace1)
8628 if Xsignal.get() == 7:
8631 Yconv1 = float(GRHXY/10.0) / CH2IpdvRange
8632 Xconv1 = float(GRWXY/10.0) / CH2pdvRange
8634 c2 = GRWXY / 2.0 + X0LXY
8636 if HistAsPercent == 1:
8637 ylo = float(HBuffB[0][b]) / len(VBuffB)
8641 ylo = int(y1 - Yconv1 * ylo)
8646 xlo = HBuffB[1][b] - CHBOffset
8647 xlo = int(c2 + Xconv1 * xlo)
8648 Dline = [xlo,y1,xlo,ylo]
8649 XYca.create_line(Dline, fill=COLORtrace2)
8652 COLORXmarker = COLORtrace1
8653 COLORYmarker = COLORtrace2
8654 if Xsignal.get() == 1
or Xsignal.get() == 6:
8655 Xconv1 = float(GRWXY/10) / CH1pdvRange
8656 Xoffset1 = CHAOffset
8657 COLORXmarker = COLORtrace1
8659 if Xsignal.get() == 2:
8660 Xconv1 = float(GRWXY/10) / CH1IpdvRange
8661 Xoffset1 = CHAIOffset
8662 COLORXmarker = COLORtrace3
8664 if Xsignal.get() == 3
or Xsignal.get() == 7:
8665 Xconv1 = float(GRWXY/10) / CH2pdvRange
8666 Xoffset1 = CHBOffset
8667 COLORXmarker = COLORtrace2
8669 if Xsignal.get() == 4:
8670 Xconv1 = float(GRWXY/10) / CH2IpdvRange
8671 Xoffset1 = CHBIOffset
8672 COLORmarker = COLORtrace4
8674 if Xsignal.get() == 5:
8675 X_label = MathXUnits
8676 if MathXAxis ==
"V-A":
8677 Xconv1 = float(GRWXY/10) / CH1pdvRange
8678 Xoffset1 = CHAOffset
8679 COLORXmarker = COLORtrace1
8680 elif MathXAxis ==
"V-B":
8681 Xconv1 = float(GRWXY/10) / CH2pdvRange
8682 Xoffset1 = CHBOffset
8683 COLORXmarker = COLORtrace2
8684 elif MathXAxis ==
"I-A":
8685 Xconv1 = float(GRWXY/10) / CH1IpdvRange
8686 Xoffset1 = CHAIOffset
8687 COLORXmarker = COLORtrace3
8688 elif MathXAxis ==
"I-B":
8689 Xconv1 = float(GRWXY/10) / CH2IpdvRange
8690 Xoffset1 = CHBIOffset
8691 COLORXmarker = COLORtrace4
8693 Xconv1 = float(GRWXY/10) / CH1pdvRange
8694 Xoffset1 = CHAOffset
8695 COLORXmarker = COLORtrace1
8697 if YsignalVA.get() == 1
or YsignalM.get() == 1:
8698 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
8699 Yoffset1 = CHAOffset
8700 COLORYmarker = COLORtrace1
8702 if YsignalIA.get() == 1:
8703 Yconv1 = float(GRHXY/10.0) / CH1IpdvRange
8704 Yoffset1 = CHAIOffset
8705 COLORYmarker = COLORtrace3
8707 if YsignalVB.get() == 1
or YsignalM.get() == 1:
8708 Yconv1 = float(GRHXY/10.0) / CH2pdvRange
8709 Yoffset1 = CHBOffset
8710 COLORYmarker = COLORtrace2
8712 if YsignalIB.get() == 1:
8713 Yconv1 = float(GRHXY/10.0) / CH2IpdvRange
8714 Yoffset1 = CHBIOffset
8715 COLORYmarker = COLORtrace4
8717 if YsignalM.get() == 1
or YsignalMX.get() == 1
or YsignalMY.get() == 1:
8718 Y_label = MathYUnits
8719 if MathYAxis ==
"V-A":
8720 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
8721 Yoffset1 = CHAOffset
8722 COLORYmarker = COLORtrace1
8723 elif MathYAxis ==
"V-B":
8724 Yconv1 = float(GRHXY/10.0) / CH2pdvRange
8725 Yoffset1 = CHBOffset
8726 COLORYmarker = COLORtrace2
8727 elif MathYAxis ==
"I-A":
8728 Yconv1 = float(GRHXY/10.0) / CH1IpdvRange
8729 Yoffset1 = CHAIOffset
8730 COLORYmarker = COLORtrace3
8731 elif MathYAxis ==
"I-B":
8732 Yconv1 = float(GRHXY/10.0) / CH2IpdvRange
8733 Yoffset1 = CHBIOffset
8734 COLORYmarker = COLORtrace4
8736 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
8737 Yoffset1 = CHAOffset
8738 COLORYmarker = COLORtrace1
8739 if ShowXCur.get() > 0:
8740 Dline = [XCursor, Y0TXY, XCursor, Y0TXY+GRHXY]
8741 XYca.create_line(Dline, dash=(4,3), fill=COLORXmarker, width=GridWidth.get())
8742 c1 = GRWXY / 2.0 + X0LXY
8743 xvolts = Xoffset1 - ((c1-XCursor)/Xconv1)
8744 XString =
' {0:.3f} '.format(xvolts)
8745 V_label = XString + X_label
8746 XYca.create_text(XCursor+1, YCursor-5, text=V_label, fill=COLORXmarker, anchor=
"w", font=(
"arial", FontSize ))
8747 if ShowYCur.get() > 0:
8748 Dline = [X0LXY, YCursor, X0LXY+GRWXY, YCursor]
8749 XYca.create_line(Dline, dash=(4,3), fill=COLORYmarker, width=GridWidth.get())
8750 c1 = GRHXY / 2.0 + Y0TXY
8751 yvolts = ((YCursor-c1)/Yconv1) - Yoffset1
8752 V1String =
' {0:.3f} '.format(-yvolts)
8753 V_label = V1String + Y_label
8754 XYca.create_text(XCursor+1, YCursor+5, text=V_label, fill=COLORYmarker, anchor=
"w", font=(
"arial", FontSize ))
8755 if ShowXCur.get() == 0
and ShowYCur.get() == 0
and MouseWidget == XYca:
8756 if MouseX > X0LXY
and MouseX < X0LXY+GRWXY
and MouseY > Y0TXY
and MouseY < Y0TXY+GRHXY:
8757 Dline = [MouseX, Y0TXY, MouseX, Y0TXY+GRHXY]
8758 XYca.create_line(Dline, dash=(4,3), fill=COLORXmarker, width=GridWidth.get())
8759 c1 = GRWXY / 2.0 + X0LXY
8760 xvolts = Xoffset1 - ((c1-MouseX)/Xconv1)
8761 XString =
' {0:.3f} '.format(xvolts)
8762 V_label = XString + X_label
8763 XYca.create_text(MouseX+1, MouseY-5, text=V_label, fill=COLORXmarker, anchor=
"w", font=(
"arial", FontSize ))
8764 Dline = [X0LXY, MouseY, X0LXY+GRWXY, MouseY]
8765 XYca.create_line(Dline, dash=(4,3), fill=COLORYmarker, width=GridWidth.get())
8766 c1 = GRHXY / 2 + Y0TXY
8767 yvolts = ((MouseY-c1)/Yconv1) - Yoffset1
8768 V1String =
' {0:.3f} '.format(-yvolts)
8769 V_label = V1String + Y_label
8770 XYca.create_text(MouseX+1, MouseY+5, text=V_label, fill=COLORYmarker, anchor=
"w", font=(
"arial", FontSize ))
8775 if TRACEmodeTime.get() == 1:
8776 sttxt = sttxt +
" Averaging"
8777 if ManualTrigger.get() == 1:
8778 sttxt =
"Manual Trigger"
8779 if (RUNstatus.get() == 0)
or (RUNstatus.get() == 3):
8781 if ScreenXYrefresh.get() == 1:
8782 sttxt = sttxt +
" Persistance ON"
8784 de = XYca.find_enclosed( X0LXY-1, Y0TXY+GRHXY+19, CANVASwidthXY, Y0TXY+GRHXY+100)
8788 de = XYca.find_enclosed( X0LXY-1, -1, CANVASwidthXY, 20)
8791 if LabelPlotText.get() > 0:
8792 txt = PlotLabelText +
" Sample rate: " + str(SAMPLErate) +
" " + sttxt
8794 txt =
"Device ID " + DevID[17:31] +
" Sample rate: " + str(SAMPLErate) +
" " + sttxt
8797 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
8800 BoxColor =
"#808080"
8801 if DacScreenStatus.get() == 0
and DigScreenStatus.get() == 1 :
8802 if D0.get() == 0
and D4.get() == 0:
8803 Dval = devx.ctrl_transfer( 0xc0, 0x91, 4, 0, 0, 1, 100)
8805 BoxColor =
"#00ff00"
8807 BoxColor =
"#ff0000"
8808 XYca.create_rectangle(x2-12, 6, x2, 18, fill=BoxColor)
8810 XYca.create_rectangle(x2-12, 6, x2, 18, fill=
"yellow")
8811 if D1.get() == 0
and D5.get() == 0:
8812 Dval = devx.ctrl_transfer( 0xc0, 0x91, 5, 0, 0, 1, 100)
8814 BoxColor =
"#00ff00"
8816 BoxColor =
"#ff0000"
8817 XYca.create_rectangle(x2-26, 6, x2-14, 18, fill=BoxColor)
8819 XYca.create_rectangle(x2-26, 6, x2-14, 18, fill=
"yellow")
8820 if D2.get() == 0
and D6.get() == 0:
8821 Dval = devx.ctrl_transfer( 0xc0, 0x91, 6, 0, 0, 1, 100)
8823 BoxColor =
"#00ff00"
8825 BoxColor =
"#ff0000"
8826 XYca.create_rectangle(x2-40, 6, x2-28, 18, fill=BoxColor)
8828 XYca.create_rectangle(x2-40, 6, x2-28, 18, fill=
"yellow")
8829 if D3.get() == 0
and D7.get() == 0:
8830 Dval = devx.ctrl_transfer( 0xc0, 0x91, 7, 0, 0, 1, 100)
8832 BoxColor =
"#00ff00"
8834 BoxColor =
"#ff0000"
8835 XYca.create_rectangle(x2-54, 6, x2-42, 18, fill=BoxColor)
8837 XYca.create_rectangle(x2-54, 6, x2-42, 18, fill=
"yellow")
8838 XYca.create_text(x2-56, 12, text=
"Digital Inputs", anchor=E, fill=COLORtext)
8841 if Xsignal.get() == 1
or Xsignal.get() == 3:
8843 if Xsignal.get() == 1:
8844 if MeasAHW.get() == 1:
8845 txt = txt +
" CA Hi Width = " +
' {0:.2f} '.format(CHAHW) +
" mS "
8846 if MeasALW.get() == 1:
8847 txt = txt +
" CA Lo Width = " +
' {0:.2f} '.format(CHALW) +
" mS "
8848 if MeasADCy.get() == 1:
8849 txt = txt +
" CA DutyCycle = " +
' {0:.1f} '.format(CHADCy) +
" % "
8850 if MeasAPER.get() == 1:
8851 txt = txt +
" CA Period = " +
' {0:.2f} '.format(CHAperiod) +
" mS "
8852 if MeasAFREQ.get() == 1:
8853 txt = txt +
" CA Freq = " +
' {0:.1f} '.format(CHAfreq) +
" Hz "
8854 if Xsignal.get() == 3:
8855 if MeasBHW.get() == 1:
8856 txt = txt +
" CB Hi Width = " +
' {0:.2f} '.format(CHBHW) +
" mS "
8857 if MeasBLW.get() == 1:
8858 txt = txt +
" CB Lo Width = " +
' {0:.2f} '.format(CHBLW) +
" mS "
8859 if MeasBDCy.get() == 1:
8860 txt = txt +
" CB DutyCycle = " +
' {0:.1f} '.format(CHBDCy) +
" % "
8861 if MeasBPER.get() == 1:
8862 txt = txt +
" CB Period = " +
' {0:.2f} '.format(CHBperiod) +
" mS "
8863 if MeasBFREQ.get() == 1:
8864 txt = txt +
" CB Freq = " +
' {0:.1f} '.format(CHBfreq) +
" Hz "
8865 if MeasPhase.get() == 1:
8866 txt = txt +
" CA-B Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
8869 y = Y0TXY+GRHXY+int(2.5*FontSize)
8870 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
8872 if Xsignal.get() == 1
or YsignalVA.get() == 1
or Xsignal.get() == 6:
8875 txt = txt + str(CH1pdvRange) +
" V/div"
8876 if MeasDCV1.get() == 1:
8877 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV1)
8878 if MeasMaxV1.get() == 1:
8879 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV1)
8880 if MeasTopV1.get() == 1:
8881 txt = txt +
" Top = " +
' {0:.4f} '.format(VATop)
8882 if MeasMinV1.get() == 1:
8883 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV1)
8884 if MeasBaseV1.get() == 1:
8885 txt = txt +
" Top = " +
' {0:.4f} '.format(VABase)
8886 if MeasMidV1.get() == 1:
8887 MidV1 = (MaxV1+MinV1)/2
8888 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV1)
8889 if MeasPPV1.get() == 1:
8891 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV1)
8892 if MeasRMSV1.get() == 1:
8893 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV1)
8894 if MeasUserA.get() == 1:
8896 TempValue = eval(UserAString)
8897 V1String =
' {0:.4f} '.format(TempValue)
8900 txt = txt + UserALabel +
" = " + V1String
8901 if Xsignal.get() == 2:
8903 txt = txt + str(CH1IpdvRange) +
" mA/div"
8904 elif (Xsignal.get() == 2):
8906 txt = txt + str(CH1IpdvRange) +
" mA/div"
8907 if Xsignal.get() == 2
or YsignalIA.get() == 1:
8908 if MeasDCI1.get() == 1:
8909 V1String =
' {0:.2f} '.format(DCI1)
8910 txt = txt +
" AvgI = " + V1String
8911 if AWGAShape.get() == 0:
8913 Resvalue = (DCV1/DCI1)*1000
8914 txt = txt +
" Res = " +
' {0:.1f} '.format(Resvalue)
8916 txt = txt +
" Res = OverRange"
8917 if MeasMaxI1.get() == 1:
8918 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI1)
8919 if MeasMinI1.get() == 1:
8920 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI1)
8921 if MeasMidI1.get() == 1:
8922 MidI1 = (MaxI1+MinI1)/2
8923 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI1)
8924 if MeasPPI1.get() == 1:
8926 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI1)
8927 if MeasRMSI1.get() == 1:
8928 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI1)
8931 y = Y0TXY+GRHXY+int(4*FontSize)
8932 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
8935 if Xsignal.get() == 3
or YsignalVB.get() == 1
or Xsignal.get() == 7:
8937 txt = txt + str(CH2pdvRange) +
" V/div"
8938 if MeasDCV2.get() == 1:
8939 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV2)
8940 if MeasMaxV2.get() == 1:
8941 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV2)
8942 if MeasTopV2.get() == 1:
8943 txt = txt +
" Top = " +
' {0:.4f} '.format(VBTop)
8944 if MeasMinV2.get() == 1:
8945 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV2)
8946 if MeasBaseV2.get() == 1:
8947 txt = txt +
" Top = " +
' {0:.4f} '.format(VBBase)
8948 if MeasMidV2.get() == 1:
8949 MidV2 = (MaxV2+MinV2)/2
8950 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV2)
8951 if MeasPPV2.get() == 1:
8953 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV2)
8954 if MeasRMSV2.get() == 1:
8955 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV2)
8956 if MeasUserB.get() == 1:
8958 TempValue = eval(UserBString)
8959 V1String =
' {0:.4f} '.format(TempValue)
8962 txt = txt + UserBLabel +
" = " + V1String
8963 if Xsignal.get() == 4:
8965 txt = txt + str(CH2IpdvRange) +
" mA/div"
8966 elif Xsignal.get() == 4:
8968 txt = txt + str(CH2IpdvRange) +
" mA/div"
8969 if Xsignal.get() == 4
or YsignalIB.get() == 1:
8970 if MeasDCI2.get() == 1:
8971 V1String =
' {0:.2f} '.format(DCI2)
8972 txt = txt +
" AvgI = " + V1String
8973 if AWGBShape.get() == 0:
8975 Resvalue = (DCV2/DCI2)*1000
8976 txt = txt +
" Res = " +
' {0:.1f} '.format(Resvalue)
8978 txt = txt +
" Res = OverRange"
8979 if MeasMaxI2.get() == 1:
8980 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI2)
8981 if MeasMinI2.get() == 1:
8982 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI2)
8983 if MeasMidI2.get() == 1:
8984 MidI2 = (MaxI2+MinI2)/2
8985 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI2)
8986 if MeasPPI2.get() == 1:
8988 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI2)
8989 if MeasRMSI2.get() == 1:
8990 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI2)
8993 y = Y0TXY+GRHXY+int(5.5 * FontSize)
8994 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
8997 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
8999 if MarkerScale.get() != 1:
9001 CHAlab.config(style=
"Rtrace1.TButton")
9002 CHBlab.config(style=
"Strace2.TButton")
9003 CHAIlab.config(style=
"Strace3.TButton")
9004 CHBIlab.config(style=
"Strace4.TButton")
9009 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
9011 if MarkerScale.get() != 3:
9013 CHAlab.config(style=
"Strace1.TButton")
9014 CHBlab.config(style=
"Strace2.TButton")
9015 CHAIlab.config(style=
"Rtrace3.TButton")
9016 CHBIlab.config(style=
"Strace4.TButton")
9021 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
9023 if MarkerScale.get() != 2:
9025 CHAlab.config(style=
"Strace1.TButton")
9026 CHBlab.config(style=
"Rtrace2.TButton")
9027 CHAIlab.config(style=
"Strace3.TButton")
9028 CHBIlab.config(style=
"Strace4.TButton")
9033 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
9035 if MarkerScale.get() != 3:
9037 CHAlab.config(style=
"Strace1.TButton")
9038 CHBlab.config(style=
"Strace2.TButton")
9039 CHAIlab.config(style=
"Strace3.TButton")
9040 CHBIlab.config(style=
"Rtrace4.TButton")
9045 global MarkerXYScale, CHAxylab, CHBxylab
9047 MarkerXYScale.set(1)
9048 CHAxylab.config(style=
"Rtrace1.TButton")
9049 CHBxylab.config(style=
"Strace2.TButton")
9052 global MarkerXYScale, CHAxylab, CHBxylab
9054 MarkerXYScale.set(2)
9055 CHBxylab.config(style=
"Rtrace2.TButton")
9056 CHAxylab.config(style=
"Strace1.TButton")
9059 global ShowTCur, ShowVCur, TCursor, VCursor, RUNstatus, ca
9063 if RUNstatus.get() == 0:
9065 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
9068 global ShowTCur, ShowVCur, TCursor, VCursor, RUNstatus, ca, MWcount
9069 global MeasGateStatus, MeasGateLeft, MeasGateRight, TIMEdiv, GRW
9071 ShiftKeyDwn = event.state & 1
9072 if event.widget == ca:
9073 if ShowTCur.get() > 0
or ShowVCur.get() > 0:
9074 if ShowTCur.get() > 0
and ShiftKeyDwn == 0:
9076 if event.num == 5
or event.delta == -120:
9078 if event.num == 4
or event.delta == 120:
9080 elif ShowVCur.get() > 0
or ShiftKeyDwn == 1:
9082 if event.num == 5
or event.delta == -120:
9084 if event.num == 4
or event.delta == 120:
9091 if MeasGateStatus.get() == 1:
9092 Tstep = (TIMEdiv / GRW) / 10
9093 if ShiftKeyDwn == 0:
9094 if event.num == 5
or event.delta == -120:
9095 MeasGateLeft = MeasGateLeft + (-100 * Tstep)
9096 if event.num == 4
or event.delta == 120:
9097 MeasGateLeft = MeasGateLeft + (100 * Tstep)
9099 if ShiftKeyDwn == 1:
9100 if event.num == 5
or event.delta == -120:
9101 MeasGateRight = MeasGateRight + (-100 * Tstep)
9102 if event.num == 4
or event.delta == 120:
9103 MeasGateRight = MeasGateRight + (100 * Tstep)
9109 if RUNstatus.get() == 0:
9113 global ShowVCur, VCursor, YCursor, dBCursor, BdBCursor, RUNstatus, ca, XYca, Freqca, Bodeca
9115 shift_key = event.state & 1
9116 if event.widget == ca:
9117 if ShowVCur.get() > 0
and shift_key == 0:
9118 VCursor = VCursor - 1
9119 elif ShowVCur.get() > 0
and shift_key == 1:
9120 VCursor = VCursor - 5
9121 if RUNstatus.get() == 0:
9124 if event.widget == XYca:
9125 if ShowYCur.get() > 0
and shift_key == 0:
9126 YCursor = YCursor - 1
9127 elif ShowYCur.get() > 0
and shift_key == 1:
9128 YCursor = YCursor - 5
9129 if RUNstatus.get() == 0:
9134 if event.widget == Freqca:
9135 if ShowdBCur.get() > 0
and shift_key == 0:
9136 dBCursor = dBCursor - 1
9137 elif ShowdBCur.get() > 0
and shift_key == 1:
9138 dBCursor = dBCursor - 5
9139 if RUNstatus.get() == 0:
9144 if event.widget == Bodeca:
9145 if ShowBdBCur.get() > 0
and shift_key == 0:
9146 BdBCursor = BdBCursor - 1
9147 elif ShowBdBCur.get() > 0
and shift_key == 1:
9148 BdBCursor = BdBCursor - 5
9149 if RUNstatus.get() == 0:
9155 global ShowVCur, VCursor, YCursor, dBCursor, BdBCursor, RUNstatus, ca, XYca, Freqca
9157 shift_key = event.state & 1
9158 if event.widget == ca:
9159 if ShowVCur.get() > 0
and shift_key == 0:
9160 VCursor = VCursor + 1
9161 elif ShowVCur.get() > 0
and shift_key == 1:
9162 VCursor = VCursor + 5
9163 if RUNstatus.get() == 0:
9166 if event.widget == XYca:
9167 if ShowYCur.get() > 0
and shift_key == 0:
9168 YCursor = YCursor + 1
9169 elif ShowYCur.get() > 0
and shift_key == 1:
9170 YCursor = YCursor + 5
9171 if RUNstatus.get() == 0:
9176 if event.widget == Freqca:
9177 if ShowdBCur.get() > 0
and shift_key == 0:
9178 dBCursor = dBCursor + 1
9179 elif ShowdBCur.get() > 0
and shift_key == 1:
9180 dBCursor = dBCursor + 5
9181 if RUNstatus.get() == 0:
9186 if event.widget == Bodeca:
9187 if ShowBdBCur.get() > 0
and shift_key == 0:
9188 BdBCursor = BdBCursor + 1
9189 elif ShowBdBCur.get() > 0
and shift_key == 1:
9190 BdBCursor = BdBCursor + 5
9191 if RUNstatus.get() == 0:
9197 global ShowTCur, TCursor, XCursor, FCursor, BPCursor, RUNstatus, ca, XYca, Freqca
9199 shift_key = event.state & 1
9200 if event.widget == ca:
9201 if ShowTCur.get() > 0
and shift_key == 0:
9202 TCursor = TCursor - 1
9203 elif ShowTCur.get() > 0
and shift_key == 1:
9204 TCursor = TCursor - 5
9205 if RUNstatus.get() == 0:
9208 if event.widget == XYca:
9209 if ShowXCur.get() > 0
and shift_key == 0:
9210 XCursor = XCursor - 1
9211 elif ShowXCur.get() > 0
and shift_key == 1:
9212 XCursor = XCursor - 5
9213 if RUNstatus.get() == 0:
9218 if event.widget == Freqca:
9219 if ShowFCur.get() > 0
and shift_key == 0:
9220 FCursor = FCursor - 1
9221 elif ShowFCur.get() > 0
and shift_key == 1:
9222 FCursor = FCursor - 5
9223 if RUNstatus.get() == 0:
9228 if event.widget == Bodeca:
9229 if ShowBPCur.get() > 0
and shift_key == 0:
9230 BPCursor = BPCursor - 1
9231 elif ShowBPCur.get() > 0
and shift_key == 1:
9232 BPCursor = BPCursor - 5
9233 if RUNstatus.get() == 0:
9239 global ShowTCur, TCursor, XCursor, FCursor, BPCursor, RUNstatus, ca, XYca, Freqca
9241 shift_key = event.state & 1
9242 if event.widget == ca:
9243 if ShowTCur.get() > 0
and shift_key == 0:
9244 TCursor = TCursor + 1
9245 elif ShowTCur.get() > 0
and shift_key == 1:
9246 TCursor = TCursor + 5
9247 if RUNstatus.get() == 0:
9250 if event.widget == XYca:
9251 if ShowXCur.get() > 0
and shift_key == 0:
9252 XCursor = XCursor + 1
9253 elif ShowXCur.get() > 0
and shift_key == 1:
9254 XCursor = XCursor + 5
9255 if RUNstatus.get() == 0:
9260 if event.widget == Freqca:
9261 if ShowFCur.get() > 0
and shift_key == 0:
9262 FCursor = FCursor + 1
9263 elif ShowFCur.get() > 0
and shift_key == 1:
9264 FCursor = FCursor + 5
9265 if RUNstatus.get() == 0:
9270 if event.widget == Bodeca:
9271 if ShowBPCur.get() > 0
and shift_key == 0:
9272 BPCursor = BPCursor + 1
9273 elif ShowBPCur.get() > 0
and shift_key == 1:
9274 BPCursor = BPCursor + 5
9275 if RUNstatus.get() == 0:
9281 global RUNstatus, ca, XYca, Freqca, Bodeca, IAca
9283 if event.widget == ca:
9284 if RUNstatus.get() == 0:
9286 elif RUNstatus.get() > 0:
9289 if event.widget == XYca:
9290 if RUNstatus.get() == 0:
9292 elif RUNstatus.get() > 0:
9297 if event.widget == IAca:
9298 if RUNstatus.get() == 0:
9300 elif RUNstatus.get() > 0:
9305 if event.widget == Freqca:
9306 if RUNstatus.get() == 0:
9308 elif RUNstatus.get() > 0:
9313 if event.widget == Bodeca:
9314 if RUNstatus.get() == 0:
9316 elif RUNstatus.get() > 0:
9327 global ca, MarkerLoc, Mulx, Roll_Mode
9328 global HoldOffentry, Xsignal, Ysignal, COLORgrid, COLORtext
9329 global TMsb, CHAsb, CHBsb, CHAIsb, CHBIsb, MarkerScale
9330 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
9331 global SAMPLErate, RUNstatus, MarkerNum, PrevV, PrevT
9332 global COLORtrace1, COLORtrace2, MathUnits, MathXUnits, MathYUnits
9333 global CH1pdvRange, CH2pdvRange, CH1IpdvRange, CH2IpdvRange
9334 global CHAOffset, CHAIOffset, CHBOffset, CHBIOffset
9335 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
9336 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
9337 global MeasGateLeft, MeasGateRight, MeasGateStatus, MeasGateNum, TMsb, SAMPLErate
9340 HoldOff = float(eval(HoldOffentry.get()))
9344 HoldOffentry.delete(0,END)
9345 HoldOffentry.insert(0, HoldOff)
9348 TIMEdiv = float(eval(TMsb.get()))
9351 TMsb.delete(0,
"end")
9352 TMsb.insert(0,TIMEdiv)
9354 if TIMEdiv < 0.0002:
9357 if (RUNstatus.get() == 0):
9358 MarkerNum = MarkerNum + 1
9361 CH1pdvRange = float(eval(CHAsb.get()))
9364 CHAsb.insert(0, CH1pdvRange)
9366 CH2pdvRange = float(eval(CHBsb.get()))
9369 CHBsb.insert(0, CH2pdvRange)
9371 CH1IpdvRange = float(eval(CHAIsb.get()))
9373 CHAIsb.delete(0,END)
9374 CHAIsb.insert(0, CH1IpdvRange)
9376 CH2IpdvRange = float(eval(CHBIsb.get()))
9378 CHBIsb.delete(0,END)
9379 CHBIsb.insert(0, CH2IpdvRange)
9382 CHAOffset = float(eval(CHAVPosEntry.get()))
9384 CHAVPosEntry.delete(0,END)
9385 CHAVPosEntry.insert(0, CHAOffset)
9387 CHAIOffset = float(eval(CHAIPosEntry.get()))
9389 CHAIPosEntry.delete(0,END)
9390 CHAIPosEntry.insert(0, CHAIOffset)
9392 CHBOffset = float(eval(CHBVPosEntry.get()))
9394 CHBVPosEntry.delete(0,END)
9395 CHBVPosEntry.insert(0, CHBOffset)
9397 CHBIOffset = float(eval(CHBIPosEntry.get()))
9399 CHBIPosEntry.delete(0,END)
9400 CHBIPosEntry.insert(0, CHBIOffset)
9402 if CH1pdvRange < 0.001:
9404 if CH2pdvRange < 0.001:
9406 if CH1IpdvRange < 1.0:
9408 if CH2IpdvRange < 1.0:
9411 if MuxScreenStatus.get() == 1:
9413 CHMApdvRange = float(eval(CHB_Asb.get()))
9415 CHB_Asb.delete(0,END)
9416 CHB_Asb.insert(0, CHMApdvRange)
9418 CHMBpdvRange = float(eval(CHB_Bsb.get()))
9420 CHB_Bsb.delete(0,END)
9421 CHB_Bsb.insert(0, CHMBpdvRange)
9423 CHMCpdvRange = float(eval(CHB_Csb.get()))
9425 CHB_Csb.delete(0,END)
9426 CHB_Csb.insert(0, CHMCpdvRange)
9428 CHMDpdvRange = float(eval(CHB_Dsb.get()))
9430 CHB_Dsb.delete(0,END)
9431 CHB_Dsb.insert(0, CHMDpdvRange)
9432 YconvMA = float(GRH/10.0) / CHMApdvRange
9433 YconvMB = float(GRH/10.0) / CHMBpdvRange
9434 YconvMC = float(GRH/10.0) / CHMCpdvRange
9435 YconvMD = float(GRH/10.0) / CHMDpdvRange
9437 CHBAOffset = float(eval(CHB_APosEntry.get()))
9439 CHB_APosEntry.delete(0,END)
9440 CHB_APosEntry.insert(0, CHBAOffset)
9442 CHBBOffset = float(eval(CHB_BPosEntry.get()))
9444 CHB_BPosEntry.delete(0,END)
9445 CHB_BPosEntry.insert(0, CHBBOffset)
9447 CHBCOffset = float(eval(CHB_CPosEntry.get()))
9449 CHB_CPosEntry.delete(0,END)
9450 CHB_CPosEntry.insert(0, CHBCOffset)
9452 CHBDOffset = float(eval(CHB_DPosEntry.get()))
9454 CHB_DPosEntry.delete(0,END)
9455 CHB_DPosEntry.insert(0, CHBDOffset)
9456 Yoffset1 = CHAOffset
9457 if MarkerScale.get() == 1:
9458 Yconv1 = float(GRH/10.0) / CH1pdvRange
9459 Yoffset1 = CHAOffset
9460 COLORmarker = COLORtrace1
9462 elif MarkerScale.get() == 2:
9463 Yconv1 = float(GRH/10.0) / CH2pdvRange
9464 Yoffset1 = CHBOffset
9465 COLORmarker = COLORtrace2
9467 elif MarkerScale.get() == 3:
9468 Yconv1 = float(GRH/10.0) / CH1IpdvRange
9469 Yoffset1 = CHAIOffset
9470 COLORmarker = COLORtrace3
9472 elif MarkerScale.get() == 4:
9473 Yconv1 = float(GRH/10.0) / CH2IpdvRange
9474 Yoffset1 = CHBIOffset
9475 COLORmarker = COLORtrace4
9478 elif MarkerScale.get() == 5:
9479 Yconv1 = float(GRH/10.0) / CHMApdvRange
9480 Yoffset1 = CHBAOffset
9481 COLORmarker = COLORtrace2
9483 elif MarkerScale.get() == 6:
9484 Yconv1 = float(GRH/10.0) / CHMBpdvRange
9485 Yoffset1 = CHBBOffset
9486 COLORmarker = COLORtrace6
9488 elif MarkerScale.get() == 7:
9489 Yconv1 = float(GRH/10.0) / CHMCpdvRange
9490 Yoffset1 = CHBCOffset
9491 COLORmarker = COLORtrace7
9493 elif MarkerScale.get() == 8:
9494 Yconv1 = float(GRH/10.0) / CHMDpdvRange
9495 Yoffset1 = CHBDOffset
9496 COLORmarker = COLORtrace4
9499 Yconv1 = float(GRH/10.0) / CH1pdvRange
9500 Yoffset1 = CHAOffset
9501 COLORmarker = COLORtrace1
9504 c1 = GRH / 2.0 + Y0T
9505 xc1 = GRW / 2.0 + X0L
9506 c2 = GRH / 2.0 + Y0T
9508 ca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORtext)
9509 ca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORtext)
9511 Tstep = (10.0 * TIMEdiv) / GRW
9512 Tpoint = ((event.x-X0L) * Tstep) + HoldOff
9514 Tpoint = Tpoint/Mulx
9516 axis_value = Tpoint / 1000.0
9517 TString =
' {0:.2f} '.format(axis_value) +
" S "
9518 if Tpoint < 1000
and Tpoint >= 1:
9520 TString =
' {0:.2f} '.format(axis_value) +
" mS "
9522 axis_value = Tpoint * 1000.0
9523 TString =
' {0:.2f} '.format(axis_value) +
" uS "
9525 yvolts = ((event.y-c1)/Yconv1) - Yoffset1
9526 if MarkerScale.get() == 1
or MarkerScale.get() == 2:
9527 V1String =
' {0:.3f} '.format(-yvolts)
9529 V1String =
' {0:.1f} '.format(-yvolts)
9530 V_label = str(MarkerNum) +
" " + TString + V1String
9531 V_label = V_label + Units
9533 if MarkerScale.get() == 1
or MarkerScale.get() == 2:
9534 DeltaV =
' {0:.3f} '.format(PrevV-yvolts)
9536 DeltaV =
' {0:.1f} '.format(PrevV-yvolts)
9537 if Roll_Mode.get() == 0:
9540 axis_value = DT / 1000.0
9541 DeltaT =
' {0:.2f} '.format(axis_value) +
" S "
9542 if Tpoint < 1000
and Tpoint >= 1:
9544 DeltaT =
' {0:.2f} '.format(axis_value) +
" mS "
9546 axis_value = DT * 1000.0
9547 DeltaT =
' {0:.2f} '.format(axis_value) +
" uS "
9549 DFreq =
' {0:.3f} '.format(1.0/(Tpoint-PrevT))
9550 V_label = V_label +
" Delta " + DeltaT + DeltaV
9551 V_label = V_label + Units
9552 V_label = V_label +
", Freq " + DFreq +
" KHz"
9554 V_label = V_label +
" Delta " + DeltaV + Units
9557 y = Y0T + 3 + (MarkerNum*10)
9559 if MarkerLoc ==
'UR' or MarkerLoc ==
'ur':
9561 y = Y0T + 3 + (MarkerNum*10)
9563 if MarkerLoc ==
'LL' or MarkerLoc ==
'll':
9565 y = Y0T + GRH + 3 - (MarkerNum*10)
9567 if MarkerLoc ==
'LR' or MarkerLoc ==
'lr':
9569 y = Y0T + GRH + 3 - (MarkerNum*10)
9571 ca.create_text(event.x+4, event.y, text=str(MarkerNum), fill=COLORtext, anchor=Justify, font=(
"arial", FontSize ))
9572 ca.create_text(x, y, text=V_label, fill=COLORmarker, anchor=Justify, font=(
"arial", FontSize ))
9576 if MeasGateStatus.get() == 1:
9578 Tstep = (10.0 * TIMEdiv) / GRW
9579 if MeasGateNum == 0:
9580 MeasGateLeft = ((event.x-X0L) * Tstep)
9583 MeasGateRight = ((event.x-X0L) * Tstep)
9585 LeftGate = X0L + MeasGateLeft / Tstep
9586 RightGate = X0L + MeasGateRight / Tstep
9587 ca.create_line(LeftGate, Y0T, LeftGate, Y0T+GRH, fill=COLORtext)
9588 ca.create_line(RightGate, Y0T, RightGate, Y0T+GRH, fill=COLORtext)
9594 if ShowC1_V.get() == 0:
9602 if ShowC2_V.get() == 0:
9610 if ShowC1_I.get() == 0:
9618 if ShowC2_I.get() == 0:
9668 global TRACEmodeTime
9670 if TRACEmodeTime.get() == 0:
9671 TRACEmodeTime.set(1)
9673 TRACEmodeTime.set(0)
9678 if ShowTCur.get() == 0:
9686 if ShowVCur.get() == 0:
9692 global ShowXCur, ShowYCur, XCursor, YCursor, RUNstatus, XYca
9696 if RUNstatus.get() == 0:
9698 XYca.bind_all(
'<MouseWheel>', onCanvasXYScrollClick)
9701 global ShowXCur, ShowYCur, XCursor, YCursor, RUNstatus
9702 if event.widget == XYca:
9703 if ShowXCur.get() > 0
or ShowYCur.get() > 0:
9704 ShiftKeyDwn = event.state & 1
9705 if ShowXCur.get() > 0
and ShiftKeyDwn == 0:
9707 if event.num == 5
or event.delta == -120:
9709 if event.num == 4
or event.delta == 120:
9712 elif ShowYCur.get() > 0
or ShiftKeyDwn == 1:
9714 if event.num == 5
or event.delta == -120:
9716 if event.num == 4
or event.delta == 120:
9719 if RUNstatus.get() == 0:
9729 global HoldOffentry, Xsignal, Ysignal, COLORgrid, COLORtext
9730 global TMsb, CHAsbxy, CHBsbxy, CHAIsbxy, CHBIsbxy, MarkerScale
9731 global CHAVPosEntryxy, CHAIPosEntryxy, CHBVPosEntryxy, CHBIPosEntryxy
9732 global SAMPLErate, RUNstatus, MarkerNum, PrevX, PrevY
9733 global COLORtrace1, COLORtrace2, MathUnits, MathXUnits, MathYUnits
9734 global CH1pdvRange, CH2pdvRange, CH1IpdvRange, CH2IpdvRange
9735 global CHAOffset, CHAIOffset, CHBOffset, CHBIOffset
9738 if (RUNstatus.get() == 0):
9739 MarkerNum = MarkerNum + 1
9741 CH1pdvRange = float(eval(CHAsbxy.get()))
9743 CHAsbxy.delete(0,END)
9744 CHAsbxy.insert(0, CH1pdvRange)
9746 CH2pdvRange = float(eval(CHBsbxy.get()))
9749 CHBsb.insert(0, CH2pdvRange)
9751 CH1IpdvRange = float(eval(CHAIsbxy.get()))
9753 CHAIsbxy.delete(0,END)
9754 CHAIsbxy.insert(0, CH1IpdvRange)
9756 CH2IpdvRange = float(eval(CHBIsbxy.get()))
9758 CHBIsbxy.delete(0,END)
9759 CHBIsbxy.insert(0, CH2IpdvRange)
9762 CHAOffset = float(eval(CHAVPosEntryxy.get()))
9764 CHAVPosEntryxy.delete(0,END)
9765 CHAVPosEntryxy.insert(0, CHAOffset)
9767 CHAIOffset = float(eval(CHAIPosEntryxy.get()))
9769 CHAIPosEntryxy.delete(0,END)
9770 CHAIPosEntryxy.insert(0, CHAIOffset)
9772 CHBOffset = float(eval(CHBVPosEntryxy.get()))
9774 CHBVPosEntryxy.delete(0,END)
9775 CHBVPosEntryxy.insert(0, CHBOffset)
9777 CHBIOffset = float(eval(CHBIPosEntryxy.get()))
9779 CHBIPosEntryxy.delete(0,END)
9780 CHBIPosEntryxy.insert(0, CHBIOffset)
9782 if CH1pdvRange < 0.001:
9784 if CH2pdvRange < 0.001:
9786 if CH1IpdvRange < 1.0:
9788 if CH2IpdvRange < 1.0:
9791 HoldOff = float(eval(HoldOffentry.get()))
9795 HoldOffentry.delete(0,END)
9796 HoldOffentry.insert(0, HoldOff)
9798 Yconv1 = float(GRHXY/10) / CH1pdvRange
9799 Xconv1 = float(GRWXY/10) / CH1pdvRange
9800 Yconv2 = float(GRHXY/10) / CH2pdvRange
9801 Xconv2 = float(GRWXY/10) / CH2pdvRange
9802 YIconv1 = float(GRHXY/10) / CH1IpdvRange
9803 YIconv2 = float(GRHXY/10) / CH2IpdvRange
9804 COLORmarker = COLORtext
9805 Yoffset1 = CHAOffset
9806 c1 = GRHXY / 2 + Y0TXY
9807 xc1 = GRWXY / 2 + X0LXY
9808 c2 = GRHXY / 2 + Y0TXY
9810 XYca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORtext)
9811 XYca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORtext)
9812 XYca.create_text(event.x+4, event.y, text=str(MarkerNum), fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
9813 V_label = str(MarkerNum) +
" "
9815 y = Y0TXY + 3 + (MarkerNum*10)
9816 xvolts = ((xc1-event.x)/Xconv1) - CHAOffset
9817 if (Xsignal.get()==1
or Xsignal.get()==5)
and (Ysignal.get()==3
or Ysignal.get()==5):
9818 yvolts = ((event.y-c2)/Yconv2) - CHBOffset
9819 xvolts = ((xc1-event.x)/Xconv1) - CHAOffset
9820 VyString =
' {0:.3f} '.format(-yvolts)
9821 VxString =
' {0:.3f} '.format(-xvolts)
9822 V_label = V_label + VxString +
" V, " + VyString +
" V"
9824 DeltaY =
' {0:.3f} '.format(PrevY-yvolts)
9825 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
9826 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" V"
9828 elif (Xsignal.get()==3
or Xsignal.get()==5)
and (Ysignal.get()==1
or Ysignal.get()==5):
9829 yvolts = ((event.y-c1)/Yconv1) - CHAOffset
9830 xvolts = ((xc1-event.x)/Xconv2) - CHBOffset
9831 VyString =
' {0:.3f} '.format(-yvolts)
9832 VxString =
' {0:.3f} '.format(-xvolts)
9833 V_label = V_label + VxString +
" V, " + VyString +
" V"
9835 DeltaY =
' {0:.3f} '.format(PrevY-yvolts)
9836 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
9837 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" V"
9839 elif (Xsignal.get()==1
or Xsignal.get()==5)
and (Ysignal.get()==2
or Ysignal.get()==5):
9840 xvolts = ((xc1-event.x)/Xconv1) - CHAOffset
9841 ymA = ((event.y-c2)/YIconv1) - CHAIOffset
9842 VxString =
' {0:.3f} '.format(-xvolts)
9843 VyString =
' {0:.1f} '.format(-ymA)
9844 V_label = V_label + VxString +
" V, " + VyString +
" mA"
9846 DeltaY =
' {0:.2f} '.format(PrevY-ymA)
9847 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
9848 DeltaR =
' {0:.3f} '.format(((PrevX-xvolts)/(PrevY-ymA))*1000)
9849 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" mA"
9850 V_label = V_label +
", dV/dI " + DeltaR
9852 elif (Xsignal.get()==3
or Xsignal.get()==5)
and (Ysignal.get()==4
or Ysignal.get()==5):
9853 xvolts = ((xc1-event.x)/Xconv2) - CHBOffset
9854 ymA = ((event.y-c2)/YIconv2) - CHBIOffset
9855 VxString =
' {0:.3f} '.format(-xvolts)
9856 VyString =
' {0:.1f} '.format(-ymA)
9857 V_label = V_label + VxString +
" V, " + VyString +
" mA"
9859 DeltaY =
' {0:.2f} '.format(PrevY-ymA)
9860 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
9861 DeltaR =
' {0:.3f} '.format(((PrevX-xvolts)/(PrevY-ymA))*1000)
9862 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" mA"
9863 V_label = V_label +
", dV/dI " + DeltaR
9865 elif (Xsignal.get()==3
or Xsignal.get()==5)
and (Ysignal.get()==2
or Ysignal.get()==5):
9866 xvolts = ((xc1-event.x)/Xconv2) - CHBOffset
9867 ymA = ((event.y-c2)/YIconv1) - CHAIOffset
9868 VxString =
' {0:.3f} '.format(-xvolts)
9869 VyString =
' {0:.1f} '.format(-ymA)
9870 V_label = V_label + VxString +
" V, " + VyString +
" mA"
9872 DeltaY =
' {0:.2f} '.format(PrevY-ymA)
9873 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
9874 DeltaR =
' {0:.3f} '.format(((PrevX-xvolts)/(PrevY-ymA))*1000)
9875 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" mA"
9876 V_label = V_label +
", dV/dI " + DeltaR
9878 elif (Xsignal.get()==1
or Xsignal.get()==5)
and (Ysignal.get()==4
or Ysignal.get()==5):
9879 xvolts = ((xc1-event.x)/Xconv1) - CHAOffset
9880 ymA = ((event.y-c2)/YIconv2) - CHBIOffset
9881 VxString =
' {0:.3f} '.format(-xvolts)
9882 VyString =
' {0:.1f} '.format(-ymA)
9883 V_label = V_label + VxString +
" V, " + VyString +
" mA"
9885 DeltaY =
' {0:.2f} '.format(PrevY-ymA)
9886 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
9887 DeltaR =
' {0:.3f} '.format(((PrevX-xvolts)/(PrevY-ymA))*1000)
9888 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" mA"
9889 V_label = V_label +
", dV/dI " + DeltaR
9891 XYca.create_text(x, y, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
9905 rnd_ph_pos = (numpy.ones(N-1, dtype=numpy.complex)*
9906 numpy.exp(1j*numpy.random.uniform
9907 (0.0,2.0*numpy.pi, N-1)))
9908 rnd_ph_neg = numpy.flip(numpy.conjugate(rnd_ph_pos))
9909 rnd_ph_full = numpy.concatenate(([1],rnd_ph_pos,[1], rnd_ph_neg))
9910 r_s_full = numpy.concatenate((freq, numpy.roll(numpy.flip(freq), 1)))
9911 r_spectrum_rnd_ph = r_s_full * rnd_ph_full
9912 r_time_full = numpy.fft.ifft(r_spectrum_rnd_ph)
9916 if (density ==
True):
9918 r_time_full *= N*numpy.sqrt(fs/(N))
9919 return(numpy.real(r_time_full))
9927 mag = mag * 0.707106
9928 width = int(n/(4 * b))
9930 aband = numpy.ones(width)
9931 zband = numpy.zeros(width)
9932 bands = numpy.concatenate((aband, zband))
9934 bands = numpy.concatenate((bands, aband, zband))
9949 bands = numpy.zeros(n)
9951 bands = bands * (mag/2.0)
9960 x = numpy.random.normal(0.0, 1, N).astype(numpy.float32)
9961 X = numpy.fft.rfft(x) / N
9962 S = numpy.sqrt(numpy.arange(X.size)+1.0)
9963 y = numpy.fft.irfft(X/S).real[:N]
9964 z = numpy.ndarray = mag
9965 y = y * numpy.sqrt((numpy.abs(z)**2).mean() / (numpy.abs(y)**2).mean())
9976 x = numpy.random.normal(0.0, 1, N).astype(numpy.float32)
9977 X = numpy.fft.rfft(x) / N
9978 S = numpy.sqrt(numpy.arange(X.size))
9979 y = numpy.fft.irfft(X*S).real[:N]
9980 z = numpy.ndarray = mag
9981 y = y * numpy.sqrt((numpy.abs(z)**2).mean() / (numpy.abs(y)**2).mean())
9992 x = numpy.random.normal(0.0, 1, N).astype(numpy.float32)
9993 X = numpy.fft.rfft(x) / N
9994 S = numpy.arange(X.size)+1
9995 y = numpy.fft.irfft(X/S).real[:N]
9996 z = numpy.ndarray = mag
9997 y = y * numpy.sqrt((numpy.abs(z)**2).mean() / (numpy.abs(y)**2).mean())
10008 x = numpy.random.normal(0.0, 1, N).astype(numpy.float32)
10009 X = numpy.fft.rfft(x) / N
10010 S = numpy.arange(X.size)
10011 y = numpy.fft.irfft(X*S).real[0:N]
10012 z = numpy.ndarray = mag
10013 y = y * numpy.sqrt((numpy.abs(z)**2).mean() / (numpy.abs(y)**2).mean())
10020 OutArray = Ampl*numpy.cos(numpy.linspace(0, 2*numpy.pi, Length))
10022 while k <= NrTones:
10024 Harmonic = Ampl*numpy.cos(numpy.linspace(0, k*2*numpy.pi, Length)+(numpy.pi*k*k/NrTones))
10025 OutArray = OutArray + Harmonic
10027 OutArray = OutArray + 2.5
10035 OutArray = numpy.array(OutArray)
10036 InArray = numpy.array(InArray)
10037 EndIndex = len(InArray)
10039 while StartIndex < WrFactor:
10040 OutArray = numpy.concatenate((OutArray, InArray[StartIndex:EndIndex:WrFactor]), axis=0)
10041 StartIndex = StartIndex + 1
10049 InArray = numpy.array(InArray)
10050 EndIndex = int(len(InArray)/WrFactor)
10052 while StartIndex < EndIndex:
10054 while LoopIndex < WrFactor:
10055 OutArray.append(InArray[StartIndex+LoopIndex])
10056 LoopIndex = LoopIndex + 1
10057 StartIndex = StartIndex + 1
10058 OutArray = numpy.array(OutArray)
10066 wavfile = wave.open(filename,
"w")
10069 framerate = SAMPLErate
10071 nframes = len(data)
10073 compname =
"not compressed"
10074 wavfile.setparams((nchannels,
10081 ArrN = numpy.array(data)
10082 ArrN /= numpy.max(numpy.abs(data))
10085 mul = int(s * amplitude)
10087 frames.append(struct.pack(
'h', mul))
10088 print( len(frames))
10089 frames =
''.join(frames)
10090 print( len(frames))
10091 for x
in xrange(0, repeat):
10093 wavfile.writeframes(frames)
10098 global AWGAAmplEntry, AWGAAmplvalue, AWGAMode, AWG_Amp_Mode
10099 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10102 AWGAAmplvalue = float(eval(AWGAAmplEntry.get()))
10104 AWGAAmplEntry.delete(0,
"end")
10105 AWGAAmplEntry.insert(0, AWGAAmplvalue)
10107 if AWG_Amp_Mode.get() == 0:
10108 if AWGAMode.get() == 0:
10109 if AWGAAmplvalue > 5.00:
10110 AWGAAmplvalue = 5.00
10111 AWGAAmplEntry.delete(0,
"end")
10112 AWGAAmplEntry.insert(0, AWGAAmplvalue)
10113 if AWGAAmplvalue < 0.00:
10114 AWGAAmplvalue = 0.00
10115 AWGAAmplEntry.delete(0,
"end")
10116 AWGAAmplEntry.insert(0, AWGAAmplvalue)
10117 elif AWG_Amp_Mode.get() == 1:
10118 if AWGAMode.get() == 0:
10119 if AWGAAmplvalue > (2.5 / AWGA_Ext_Gain.get()):
10120 AWGAAmplvalue = 2.5 / AWGA_Ext_Gain.get()
10121 AWGAAmplEntry.delete(0,
"end")
10122 AWGAAmplEntry.insert(0, AWGAAmplvalue)
10123 if AWGAAmplvalue < (-2.50 / AWGA_Ext_Gain.get()):
10124 AWGAAmplvalue = -2.50 / AWGA_Ext_Gain.get()
10125 AWGAAmplEntry.delete(0,
"end")
10126 AWGAAmplEntry.insert(0, AWGAAmplvalue)
10127 if AWGAMode.get() == 1:
10128 if AWGAAmplvalue > 200.00:
10129 AWGAAmplvalue = 200.00
10130 AWGAAmplEntry.delete(0,
"end")
10131 AWGAAmplEntry.insert(0, AWGAAmplvalue)
10132 if AWGAAmplvalue < -200.00:
10133 AWGAAmplvalue = -200.00
10134 AWGAAmplEntry.delete(0,
"end")
10135 AWGAAmplEntry.insert(0, AWGAAmplvalue)
10138 global AWGAOffsetEntry, AWGAOffsetvalue, AWGAMode, AWG_Amp_Mode
10139 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10142 AWGAOffsetvalue = float(eval(AWGAOffsetEntry.get()))
10144 AWGAOffsetEntry.delete(0,
"end")
10145 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
10146 if AWG_Amp_Mode.get() == 0:
10147 if AWGAMode.get() == 0:
10148 if AWGAOffsetvalue > 5.00:
10149 AWGAOffsetvalue = 5.00
10150 AWGAOffsetEntry.delete(0,
"end")
10151 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
10152 if AWGAOffsetvalue < 0.00:
10153 AWGAOffsetvalue = 0.00
10154 AWGAOffsetEntry.delete(0,
"end")
10155 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
10156 elif AWG_Amp_Mode.get() == 1:
10157 if AWGAOffsetvalue > (2.50-AWGA_Ext_Offset.get()):
10158 AWGAOffsetvalue = 2.50-AWGA_Ext_Offset.get()
10159 AWGAOffsetEntry.delete(0,
"end")
10160 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
10161 if AWGAOffsetvalue < (-2.50-AWGA_Ext_Offset.get()):
10162 AWGAOffsetvalue = -2.50-AWGA_Ext_Offset.get()
10163 AWGAOffsetEntry.delete(0,
"end")
10164 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
10165 if AWGAMode.get() == 1:
10166 if AWGAOffsetvalue > 200.00:
10167 AWGAOffsetvalue = 200.00
10168 AWGAOffsetEntry.delete(0,
"end")
10169 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
10170 if AWGAOffsetvalue < -200.00:
10171 AWGAOffsetvalue = -200.00
10172 AWGAOffsetEntry.delete(0,
"end")
10173 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
10176 global AWGAFreqEntry, AWGAFreqvalue, AWG_2X
10177 global BodeScreenStatus, BodeDisp
10180 AWGAFreqvalue = float(eval(AWGAFreqEntry.get()))
10182 AWGAFreqEntry.delete(0,
"end")
10183 AWGAFreqEntry.insert(0, AWGAFreqvalue)
10184 if AWG_2X.get() == 1:
10185 if BodeScreenStatus.get() > 0
and BodeDisp.get() > 0:
10186 if AWGAFreqvalue > 90000:
10187 AWGAFreqvalue = 90000
10188 AWGAFreqEntry.delete(0,
"end")
10189 AWGAFreqEntry.insert(0, AWGAFreqvalue)
10191 if AWGAFreqvalue > 50000:
10192 AWGAFreqvalue = 50000
10193 AWGAFreqEntry.delete(0,
"end")
10194 AWGAFreqEntry.insert(0, AWGAFreqvalue)
10196 if AWGAFreqvalue > 25000:
10197 AWGAFreqvalue = 25000
10198 AWGAFreqEntry.delete(0,
"end")
10199 AWGAFreqEntry.insert(0, AWGAFreqvalue)
10200 if AWGAFreqvalue < 0:
10202 AWGAFreqEntry.delete(0,
"end")
10203 AWGAFreqEntry.insert(0, AWGAFreqvalue)
10207 global AWGAPhaseDelay, phasealab, awgaph, awgadel
10209 if AWGAPhaseDelay.get() == 1:
10210 AWGAPhaseDelay.set(0)
10211 awgaph.configure(text=
"Phase")
10212 phasealab.configure(text=
"Deg")
10213 elif AWGAPhaseDelay.get() == 0:
10214 AWGAPhaseDelay.set(1)
10215 awgaph.configure(text=
"Delay")
10216 phasealab.configure(text=
"mSec")
10219 global AWGAPhaseDelay, phasealab, awgaph, awgadel
10221 if AWGAPhaseDelay.get() == 0:
10222 phasealab.configure(text=
"Deg")
10223 awgaph.configure(text=
"Phase")
10224 elif AWGAPhaseDelay.get() == 1:
10225 phasealab.configure(text=
"mSec")
10226 awgaph.configure(text=
"Delay")
10229 global AWGAPhaseEntry, AWGAPhasevalue
10232 AWGAPhasevalue = float(eval(AWGAPhaseEntry.get()))
10234 AWGAPhaseEntry.delete(0,
"end")
10235 AWGAPhaseEntry.insert(0, AWGAPhasevalue)
10237 if AWGAPhasevalue > 360:
10238 AWGAPhasevalue = 360
10239 AWGAPhaseEntry.delete(0,
"end")
10240 AWGAPhaseEntry.insert(0, AWGAPhasevalue)
10241 if AWGAPhasevalue < 0:
10243 AWGAPhaseEntry.delete(0,
"end")
10244 AWGAPhaseEntry.insert(0, AWGAPhasevalue)
10247 global AWGADutyCycleEntry, AWGADutyCyclevalue
10250 AWGADutyCyclevalue = float(eval(AWGADutyCycleEntry.get()))/100
10252 AWGADutyCycleEntry.delete(0,
"end")
10253 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue)
10255 if AWGADutyCyclevalue > 1:
10256 AWGADutyCyclevalue = 1
10257 AWGADutyCycleEntry.delete(0,
"end")
10258 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue*100)
10259 if AWGADutyCyclevalue < 0:
10260 AWGADutyCyclevalue = 0
10261 AWGADutyCycleEntry.delete(0,
"end")
10262 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue)
10266 global AWGAShape, AWGAWave, phasealab, duty1lab
10268 if AWGAShape.get() == 0:
10270 duty1lab.config(text=
"%")
10272 if AWGAShape.get() == 1:
10274 duty1lab.config(text=
"%")
10276 if AWGAShape.get() == 2:
10277 AWGAWave =
'triangle'
10278 duty1lab.config(text=
"%")
10280 if AWGAShape.get() == 3:
10281 AWGAWave =
'sawtooth'
10282 duty1lab.config(text=
"%")
10284 if AWGAShape.get() == 4:
10285 AWGAWave =
'square'
10286 duty1lab.config(text=
"%")
10288 if AWGAShape.get() == 5:
10289 AWGAWave =
'stairstep'
10290 duty1lab.config(text=
"%")
10292 if AWGAShape.get() > 5:
10293 AWGAWave =
'arbitrary'
10297 global AWGAwaveform, AWGALength, awgwindow, AWG_2X, AWGA2X, AWGAcsvFile
10300 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
10301 AWGAcsvFile = filename
10305 global AWGAwaveform, AWGALength, awgwindow, AWG_2X, AWGA2X, AWGAcsvFile
10308 CSVFile = open(AWGAcsvFile)
10312 csv_f = csv.reader(CSVFile, csv.excel)
10314 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
10322 if len(row) > 1
and ColumnSel == 0:
10323 RequestColumn = askstring(
"Which Column?",
"File contains 1 to " + str(len(row)) +
" columns\n\nEnter column number to import:\n", initialvalue=1, parent=awgwindow)
10324 ColumnNum = int(RequestColumn) - 1
10325 ColumnLen = str(len(row))
10330 if colnum == ColumnNum:
10331 AWGAwaveform.append(float(col))
10334 print(
'skipping non-numeric row', RowNum)
10336 AWGAwaveform = numpy.array(AWGAwaveform)
10343 global AWG_2X, AWGA2X, AWGAwaveform
10344 global AWGFiltA, AWGFiltACoef
10347 if AWGFiltA.get() == 1:
10348 BufLen = len(AWGAwaveform)
10349 CoefLen = len(AWGFiltACoef)/2
10350 AWGAwaveform = numpy.pad(AWGAwaveform, (CoefLen,CoefLen),
'wrap')
10351 AWGAwaveform = numpy.convolve(AWGAwaveform, AWGFiltACoef)
10352 AWGAwaveform = numpy.roll(AWGAwaveform, -CoefLen)
10353 AWGAwaveform = AWGAwaveform[CoefLen:BufLen+CoefLen]
10355 if AWG_2X.get() == 1:
10358 AWGA2X = AWGAwaveform[1::2]
10359 Tempwaveform = AWGAwaveform[::2]
10360 AWGAwaveform = Tempwaveform
10363 global AWGABurstFlag, AWGACycles, AWGABurstDelay
10365 if AWGABurstFlag.get() == 1:
10366 AWGACyclesString = askstring(
"AWG A Burst Mode",
"Current number of cycles " + str(AWGACycles) +
"\n\nNew number of cycles:\n", initialvalue=str(AWGACycles), parent=awgwindow)
10367 if (AWGACyclesString ==
None):
10369 AWGACycles = int(AWGACyclesString)
10370 AWGADelayString = askstring(
"AWG A Burst Mode",
"Current Burst delay " + str(AWGABurstDelay) +
"\n\nNew burst delay in mS:\n", initialvalue=str(AWGABurstDelay), parent=awgwindow)
10371 if (AWGADelayString ==
None):
10373 AWGABurstDelay = float(AWGADelayString)
10377 global AWGAwaveform, AWGALength, AWGAShape, awgwindow, AWGBwaveform, AWGBLength, AWGBShape
10378 global AWG_2X, AWGA2X, AWGAwavFile
10381 filename = askopenfilename(defaultextension =
".wav", filetypes=[(
"WAV files",
"*.wav")], parent=awgwindow)
10382 AWGAwavFile = filename
10386 global AWGAwaveform, AWGALength, AWGAShape, awgwindow, AWGBwaveform, AWGBLength, AWGBShape
10387 global AWG_2X, AWGA2X, AWGAwavFile
10390 spf = wave.open(AWGAwavFile,
'r')
10392 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
10395 Length = spf.getnframes()
10399 if spf.getnchannels() == 2:
10400 showwarning(
"Split Stereo",
"Left to AWGA Right to AWGB", parent=awgwindow)
10401 signal = spf.readframes(Length)
10402 Stereo = numpy.fromstring(signal,
'Int16')
10404 while n < Length*2:
10405 AWGAwaveform.append((Stereo[n] * 2.5 / 32768) + 2.5)
10407 AWGBwaveform.append((Stereo[n] * 2.5 / 32768) + 2.5)
10409 AWGAwaveform = numpy.array(AWGAwaveform)
10410 AWGBwaveform = numpy.array(AWGBwaveform)
10411 AWGBShape.set(AWGAShape.get())
10414 signal = spf.readframes(Length)
10415 WAVsignal = numpy.fromstring(signal,
'Int16')
10417 AWGAwaveform = (WAVsignal * 2.5 / 32768) + 2.5
10418 AWGAwaveform = numpy.array(AWGAwaveform)
10424 global AWGAwaveform, AWGALength, awgwindow
10426 filename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
10427 numpy.savetxt(filename, AWGAwaveform, delimiter=
",", fmt=
'%2.4f')
10430 global AWGAwaveform, AWGSAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB
10431 global AWGBwaveform, VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGAMathString
10432 global FFTBuffA, FFTBuffB, FFTwindowshape, AWGALength, awgwindow
10433 global DFiltACoef, DFiltBCoef, AWGAShapeLabel, AWGALength
10434 global AWG_2X, AWGA2X
10436 TempString = AWGAMathString
10437 AWGAShapeLabel.config(text =
"Math" )
10438 AWGAMathString = askstring(
"AWG A Math Formula",
"Current Formula: " + AWGAMathString +
"\n\nNew Formula:\n", initialvalue=AWGAMathString, parent=awgwindow)
10439 if (AWGAMathString ==
None):
10440 AWGAMathString = TempString
10443 AWGAwaveform = eval(AWGAMathString)
10445 showwarning(
"Syntax Error",
"Syntax Error in entered string!", parent=awgwindow)
10446 AWGAwaveform = numpy.array(AWGAwaveform)
10448 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
10452 global AWGAwaveform, AWGSAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB
10453 global AWGBwaveform, VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGAMathString
10454 global FFTBuffA, FFTBuffB, FFTwindowshape, AWGALength, awgwindow
10455 global DFiltACoef, DFiltBCoef, AWGAShapeLabel
10456 global AWG_2X, AWGA2X
10458 AWGAwaveform = eval(AWGAMathString)
10459 AWGAwaveform = numpy.array(AWGAwaveform)
10464 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
10465 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay, AWGAMode
10466 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, phasealab, AWG_Amp_Mode, AWGRecLength
10467 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10475 if AWGAFreqvalue < 10.0:
10481 if AWGAFreqvalue > 0.0:
10482 if AWG_2X.get() == 1:
10483 AWGAperiodvalue = (BaseSampleRate*2)/AWGAFreqvalue
10485 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10487 AWGAperiodvalue = 10.0
10489 if AWGAPhaseDelay.get() == 0:
10490 if AWGAPhasevalue > 0:
10491 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
10493 AWGAdelayvalue = 0.0
10494 elif AWGAPhaseDelay.get() == 1:
10495 AWGAdelayvalue = AWGAPhasevalue * SAMPLErate / 1000
10496 Cycles = int(AWGRecLength/AWGAperiodvalue)
10499 RecLength = int(Cycles * AWGAperiodvalue)
10500 if RecLength % 2 != 0:
10501 RecLength = RecLength + 1
10503 AWGAwaveform = numpy.cos(numpy.linspace(0, 2*Cycles*numpy.pi, RecLength))
10505 if AWG_Amp_Mode.get() == 0:
10506 if AWGAMode.get() == 1:
10507 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2000.0
10508 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2000.0
10510 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2.0
10511 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2.0
10513 if AWGAMode.get() == 1:
10514 amplitude = AWGAAmplvalue/1000.0
10515 offset = AWGAOffsetvalue/1000.0
10517 amplitude = AWGAAmplvalue*AWGA_Ext_Gain.get()
10518 offset = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get()
10519 AWGAwaveform = (AWGAwaveform * amplitude) + offset
10520 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
10524 duty1lab.config(text=
"%")
10528 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
10529 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay, AWGAMode
10530 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, phasealab, AWG_Amp_Mode
10531 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset, AWGRecLength
10537 duty1lab.config(text =
"M Index")
10538 phasealab.config(text =
"M Freq")
10540 if AWGAFreqvalue > 0.0:
10541 if AWG_2X.get() == 1:
10542 AWGAperiodvalue = (BaseSampleRate*2)/AWGAFreqvalue
10544 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10546 AWGAperiodvalue = 10.0
10549 ModFreq = float(eval(AWGAPhaseEntry.get()))
10552 AWGAPhaseEntry.delete(0,
"end")
10553 AWGAPhaseEntry.insert(0, ModFreq)
10557 AWGAPhaseEntry.delete(0,
"end")
10558 AWGAPhaseEntry.insert(0, ModFreq)
10560 if AWG_2X.get() == 1:
10561 MODperiodvalue = (BaseSampleRate*2)/ModFreq
10563 MODperiodvalue = BaseSampleRate/ModFreq
10566 ModIndex = float(eval(AWGADutyCycleEntry.get()))
10569 AWGADutyCycleEntry.delete(0,
"end")
10570 AWGADutyCycleEntry.insert(0, ModIndex)
10572 ModCycles = int(AWGRecLength/MODperiodvalue)
10575 RecLength = int(ModCycles * MODperiodvalue)
10576 if RecLength % 2 != 0:
10577 RecLength = RecLength + 1
10578 CarCycles = int(RecLength/AWGAperiodvalue)
10580 AWGAwaveform = numpy.sin( (numpy.linspace(0, CarCycles*2*numpy.pi, RecLength)) - ModIndex*numpy.cos(numpy.linspace(0, ModCycles*2*numpy.pi, RecLength)) )
10581 if AWG_Amp_Mode.get() == 0:
10582 if AWGAMode.get() == 1:
10583 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2000.0
10584 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2000.0
10586 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2.0
10587 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2.0
10589 if AWGAMode.get() == 1:
10590 amplitude = AWGAAmplvalue/1000.0
10591 offset = AWGAOffsetvalue/1000.0
10593 amplitude = AWGAAmplvalue*AWGA_Ext_Gain.get()
10594 offset = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get()
10595 AWGAwaveform = (AWGAwaveform * amplitude) + offset
10596 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
10602 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
10603 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay, AWGAMode
10604 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, phasealab, AWG_Amp_Mode
10605 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset, AWGRecLength
10611 duty1lab.config(text =
"M Index")
10612 phasealab.config(text =
"M Freq")
10614 if AWGAFreqvalue > 0.0:
10615 if AWG_2X.get() == 1:
10616 AWGAperiodvalue = (BaseSampleRate*2)/AWGAFreqvalue
10618 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10620 AWGAperiodvalue = 10.0
10623 ModFreq = float(eval(AWGAPhaseEntry.get()))
10626 AWGAPhaseEntry.delete(0,
"end")
10627 AWGAPhaseEntry.insert(0, ModFreq)
10631 AWGAPhaseEntry.delete(0,
"end")
10632 AWGAPhaseEntry.insert(0, ModFreq)
10634 if AWG_2X.get() == 1:
10635 MODperiodvalue = (BaseSampleRate*2)/ModFreq
10637 MODperiodvalue = BaseSampleRate/ModFreq
10640 ModIndex = float(eval(AWGADutyCycleEntry.get()))/200.0
10643 AWGADutyCycleEntry.delete(0,
"end")
10644 AWGADutyCycleEntry.insert(0, ModIndex)
10646 ModCycles = int(AWGRecLength/MODperiodvalue)
10649 RecLength = int(ModCycles * MODperiodvalue)
10650 if RecLength % 2 != 0:
10651 RecLength = RecLength + 1
10652 CarCycles = int(RecLength/AWGAperiodvalue)
10654 AWGAwaveform = numpy.sin(numpy.linspace(0, CarCycles*2*numpy.pi, RecLength)) * (0.5+(ModIndex*(numpy.cos(numpy.linspace(0, ModCycles*2*numpy.pi, RecLength)))))
10655 if AWG_Amp_Mode.get() == 0:
10656 if AWGAMode.get() == 1:
10657 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2000.0
10658 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2000.0
10660 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2.0
10661 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2.0
10663 if AWGAMode.get() == 1:
10664 amplitude = AWGAAmplvalue/1000.0
10665 offset = AWGAOffsetvalue/1000.0
10667 amplitude = AWGAAmplvalue*AWGA_Ext_Gain.get()
10668 offset = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get()
10669 AWGAwaveform = (AWGAwaveform * amplitude) + offset
10670 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
10676 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength
10677 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWG_Amp_Mode
10678 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
10679 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10687 if AWGAFreqvalue > 0.0:
10688 if AWG_2X.get() == 1:
10689 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
10691 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10693 AWGAperiodvalue = 0.0
10694 if AWG_Amp_Mode.get() == 1:
10695 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
10696 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
10698 MaxV = AWGAOffsetvalue
10699 MinV = AWGAAmplvalue
10701 PulseWidth = int(AWGADutyCyclevalue*100)
10702 PulseSamples = int(AWGAperiodvalue/PulseWidth)
10704 for i
in range(PulseSamples):
10705 v = round(PulseWidth/2*(1+numpy.sin(i*2*numpy.pi/PulseSamples)))
10707 for j
in range(PulseWidth):
10709 AWGAwaveform.append(MaxV)
10711 AWGAwaveform.append(MinV)
10713 duty1lab.config(text=
"PWidth")
10717 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength
10718 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWG_Amp_Mode
10719 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
10720 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10727 Max_term = int(AWGADutyCyclevalue*100)
10728 if AWG_2X.get() == 1:
10729 TempRate = (BaseSampleRate*2)
10731 TempRate = BaseSampleRate
10733 AWGAwaveform = numpy.cos(numpy.linspace(0, 2*numpy.pi, int(TempRate/AWGAFreqvalue)))
10735 while k <= Max_term:
10737 Harmonic = (math.sin(k*numpy.pi/2.0)/k)*(numpy.cos(numpy.linspace(0, k*2*numpy.pi, int(TempRate/AWGAFreqvalue))))
10738 AWGAwaveform = AWGAwaveform + Harmonic
10740 if AWG_Amp_Mode.get() == 0:
10741 amplitude = (AWGAOffsetvalue-AWGAAmplvalue)/2.0
10742 offset = (AWGAOffsetvalue+AWGAAmplvalue)/2.0
10744 amplitude = AWGAAmplvalue*AWGA_Ext_Gain.get()
10745 offset = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get()
10746 AWGAwaveform = (AWGAwaveform * amplitude) + offset
10748 duty1lab.config(text=
"Harmonics")
10753 global AWGAwaveform, AWGSampleRate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
10754 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay
10755 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, AWG_Amp_Mode
10756 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10764 if AWGAFreqvalue > 0.0:
10765 if AWG_2X.get() == 1:
10766 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
10767 SamplesPermS = int((BaseSampleRate*2)/1000)
10768 if AWGAperiodvalue % 2 != 0:
10769 AWGAperiodvalue = AWGAperiodvalue + 1
10771 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10772 SamplesPermS = int(BaseSampleRate/1000)
10774 AWGAperiodvalue = 0.0
10775 if AWG_Amp_Mode.get() == 1:
10776 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
10777 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
10779 MaxV = AWGAOffsetvalue
10780 MinV = AWGAAmplvalue
10782 if AWGAPhaseDelay.get() == 0:
10783 if AWGAPhasevalue > 0:
10784 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
10786 AWGAdelayvalue = 0.0
10787 elif AWGAPhaseDelay.get() == 1:
10788 AWGAdelayvalue = AWGAPhasevalue * SAMPLErate / 1000
10790 Cycles = int(AWGADutyCyclevalue*100)
10791 NCycles = -1 * Cycles
10793 AWGAwaveform = numpy.sinc(numpy.linspace(NCycles, Cycles, int(SAMPLErate/AWGAFreqvalue)))
10794 amplitude = (MaxV-MinV) / 2.0
10795 offset = (MaxV+MinV) / 2.0
10796 AWGAwaveform = (AWGAwaveform * amplitude) + offset
10797 Cycles = int(37500/AWGAperiodvalue)
10801 Extend = int((Cycles-1.0)*AWGAperiodvalue/2.0)
10802 AWGAwaveform = numpy.pad(AWGAwaveform, (Extend,Extend),
'wrap')
10803 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
10806 duty1lab.config(text=
"Cycles")
10811 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
10812 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
10813 global AWGABurstFlag, AWGACycles, AWGABurstDelay
10814 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
10815 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10823 if AWGAFreqvalue > 0.0:
10824 if AWG_2X.get() == 1:
10825 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
10826 SamplesPermS = int((BaseSampleRate*2)/1000)
10827 if AWGAperiodvalue % 2 != 0:
10828 AWGAperiodvalue = AWGAperiodvalue + 1
10830 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10831 SamplesPermS = int(BaseSampleRate/1000)
10833 AWGAperiodvalue = 0.0
10834 if AWG_Amp_Mode.get() == 1:
10835 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
10836 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
10838 MaxV = AWGAOffsetvalue
10839 MinV = AWGAAmplvalue
10841 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
10842 if SlopeValue <= 0:
10844 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
10847 Remainder = int((AWGAperiodvalue - PulseWidth - SlopeValue)/2)
10850 PulseWidth = PulseWidth - SlopeValue
10853 StepAmp = (MaxV - MinV)/2
10854 StepOff = (MaxV + MinV)/2
10855 AWGAwaveform = StepAmp * (numpy.cos(numpy.linspace(0, 2*numpy.pi, SlopeValue*2))) + StepOff
10856 MidArray = numpy.ones(PulseWidth) * MinV
10857 AWGAwaveform = numpy.insert(AWGAwaveform, SlopeValue, MidArray)
10858 AWGAwaveform = numpy.pad(AWGAwaveform, (Remainder, Remainder),
'edge')
10859 if AWGABurstFlag.get() == 1:
10860 TempOneCycle = AWGAwaveform
10861 for i
in range(AWGACycles-1):
10862 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
10863 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
10864 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
10866 duty1lab.config(text=
"%")
10867 phasealab.config(text =
"Rise Time")
10871 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
10872 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
10873 global AWGABurstFlag, AWGACycles, AWGABurstDelay
10874 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
10875 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10883 if AWGAFreqvalue > 0.0:
10884 if AWG_2X.get() == 1:
10885 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
10886 SamplesPermS = int((BaseSampleRate*2)/1000)
10887 if AWGAperiodvalue % 2 != 0:
10888 AWGAperiodvalue = AWGAperiodvalue + 1
10890 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10891 SamplesPermS = int(BaseSampleRate/1000)
10893 AWGAperiodvalue = 0.0
10894 if AWG_Amp_Mode.get() == 1:
10895 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
10896 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
10898 MaxV = AWGAOffsetvalue
10899 MinV = AWGAAmplvalue
10901 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
10902 if SlopeValue <= 0:
10904 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
10907 Remainder = int(AWGAperiodvalue - PulseWidth) - SlopeValue
10910 PulseWidth = PulseWidth - SlopeValue
10913 StepValue = (MaxV - MinV) / SlopeValue
10915 for i
in range(SlopeValue):
10916 AWGAwaveform.append(SampleValue)
10917 SampleValue = SampleValue + StepValue
10918 for i
in range(PulseWidth):
10919 AWGAwaveform.append(MaxV)
10920 for i
in range(SlopeValue):
10921 AWGAwaveform.append(SampleValue)
10922 SampleValue = SampleValue - StepValue
10923 for i
in range(Remainder):
10924 AWGAwaveform.append(MinV)
10925 if AWGABurstFlag.get() == 1:
10926 TempOneCycle = AWGAwaveform
10927 for i
in range(AWGACycles-1):
10928 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
10929 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
10930 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
10932 duty1lab.config(text=
"%")
10933 phasealab.config(text =
"Rise Time")
10937 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
10938 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
10939 global AWGABurstFlag, AWGACycles, AWGABurstDelay
10940 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
10941 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10949 AWGADutyCyclevalue = float(eval(AWGADutyCycleEntry.get()))
10951 AWGADutyCycleEntry.delete(0,
"end")
10952 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue)
10954 if AWGAFreqvalue > 0.0:
10955 if AWG_2X.get() == 1:
10956 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
10957 SamplesPermS = int((BaseSampleRate*2)/1000)
10958 if AWGAperiodvalue % 2 != 0:
10959 AWGAperiodvalue = AWGAperiodvalue + 1
10961 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10962 SamplesPermS = int(BaseSampleRate/1000)
10964 AWGAperiodvalue = 0.0
10965 if AWG_Amp_Mode.get() == 1:
10966 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
10967 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
10969 MaxV = AWGAOffsetvalue
10970 MinV = AWGAAmplvalue
10972 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
10973 if SlopeValue <= 0:
10975 PulseWidth = int(AWGADutyCyclevalue*SamplesPermS)
10978 Remainder = int(AWGAperiodvalue - PulseWidth) - SlopeValue
10981 PulseWidth = PulseWidth - SlopeValue
10984 StepValue = (MaxV - MinV) / SlopeValue
10986 for i
in range(SlopeValue):
10987 AWGAwaveform.append(SampleValue)
10988 SampleValue = SampleValue + StepValue
10989 for i
in range(PulseWidth):
10990 AWGAwaveform.append(MaxV)
10991 for i
in range(SlopeValue):
10992 AWGAwaveform.append(SampleValue)
10993 SampleValue = SampleValue - StepValue
10994 for i
in range(Remainder):
10995 AWGAwaveform.append(MinV)
10996 if AWGABurstFlag.get() == 1:
10997 TempOneCycle = AWGAwaveform
10998 for i
in range(AWGACycles-1):
10999 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
11000 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
11001 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
11003 duty1lab.config(text=
"Width mS")
11004 phasealab.config(text =
"Rise Time")
11008 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
11009 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
11010 global AWGABurstFlag, AWGACycles, AWGABurstDelay
11011 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
11012 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11020 if AWGAFreqvalue > 0.0:
11021 if AWG_2X.get() == 1:
11022 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
11023 SamplesPermS = int((BaseSampleRate*2)/1000)
11024 if AWGAperiodvalue % 2 != 0:
11025 AWGAperiodvalue = AWGAperiodvalue + 1
11027 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
11028 SamplesPermS = int(BaseSampleRate/1000)
11030 AWGAperiodvalue = 0.0
11031 if AWG_Amp_Mode.get() == 1:
11032 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
11033 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
11035 MaxV = AWGAOffsetvalue
11036 MinV = AWGAAmplvalue
11038 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
11039 if SlopeValue <= 0:
11041 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
11044 Remainder = int(AWGAperiodvalue - PulseWidth)
11047 PulseWidth = PulseWidth - SlopeValue
11050 StepValue = (MaxV - MinV) / SlopeValue
11052 for i
in range(SlopeValue):
11053 AWGAwaveform.append(SampleValue)
11054 SampleValue = SampleValue + StepValue
11055 for i
in range(PulseWidth):
11056 AWGAwaveform.append(MaxV)
11057 for i
in range(Remainder):
11058 AWGAwaveform.append(MinV)
11059 if AWGABurstFlag.get() == 1:
11060 TempOneCycle = AWGAwaveform
11061 for i
in range(AWGACycles-1):
11062 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
11063 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
11064 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
11066 duty1lab.config(text=
"%")
11067 phasealab.config(text =
"Slope Time")
11071 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, duty1lab
11072 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
11073 global AWGABurstFlag, AWGACycles, AWGABurstDelay
11074 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
11075 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11083 if AWGAFreqvalue > 0.0:
11084 if AWG_2X.get() == 1:
11085 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
11086 SamplesPermS = int((BaseSampleRate*2)/1000)
11087 if AWGAperiodvalue % 2 != 0:
11088 AWGAperiodvalue = AWGAperiodvalue + 1
11090 AWGAperiodvalue = AWGSAMPLErate/AWGAFreqvalue
11091 SamplesPermS = int(BaseSampleRate/1000)
11093 AWGAperiodvalue = 0.0
11094 if AWG_Amp_Mode.get() == 1:
11095 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
11096 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
11098 MaxV = AWGAOffsetvalue
11099 MinV = AWGAAmplvalue
11101 if AWGAPhaseDelay.get() == 0:
11102 if AWGAPhasevalue > 0:
11103 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
11105 AWGAdelayvalue = 0.0
11106 elif AWGAPhaseDelay.get() == 1:
11107 AWGAdelayvalue = AWGAPhasevalue * SAMPLErate / 1000
11110 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
11113 Remainder = int(AWGAperiodvalue - PulseWidth)
11116 UpStepValue = (MaxV - MinV) / PulseWidth
11117 DownStepValue = (MaxV - MinV) / Remainder
11119 for i
in range(PulseWidth):
11120 AWGAwaveform.append(SampleValue)
11121 SampleValue = SampleValue + UpStepValue
11122 for i
in range(Remainder):
11123 AWGAwaveform.append(SampleValue)
11124 SampleValue = SampleValue - DownStepValue
11125 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
11126 if AWGABurstFlag.get() == 1:
11127 TempOneCycle = AWGAwaveform
11128 for i
in range(AWGACycles-1):
11129 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
11130 TempDelay = int(AWGABurstDelay*SamplesPermS)
11131 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'edge')
11134 duty1lab.config(text =
"Symmetry")
11139 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, AWG_Amp_Mode
11140 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue
11141 global AWGABurstFlag, AWGACycles, AWGABurstDelay
11142 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
11143 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11151 if AWGAFreqvalue > 0.0:
11152 if AWG_2X.get() == 1:
11153 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
11154 SamplesPermS = int((BaseSampleRate*2)/1000)
11155 if AWGAperiodvalue % 2 != 0:
11156 AWGAperiodvalue = AWGAperiodvalue + 1
11158 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
11159 SamplesPermS = int(BaseSampleRate/1000)
11161 AWGAperiodvalue = 0.0
11162 if AWG_Amp_Mode.get() == 1:
11163 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
11164 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
11166 MaxV = AWGAOffsetvalue
11167 MinV = AWGAAmplvalue
11169 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue / 2.0)
11170 if AWGAPhaseDelay.get() == 0:
11171 DelayValue = int(AWGAperiodvalue*(AWGAPhasevalue/360))
11172 elif AWGAPhaseDelay.get() == 1:
11173 DelayValue = int(AWGAPhasevalue*SamplesPermS)
11174 for i
in range(DelayValue-PulseWidth):
11175 AWGAwaveform.append((MinV+MaxV)/2.0)
11176 for i
in range(PulseWidth):
11177 AWGAwaveform.append(MaxV)
11178 for i
in range(PulseWidth):
11179 AWGAwaveform.append(MinV)
11180 DelayValue = int(AWGAperiodvalue-DelayValue)
11181 for i
in range(DelayValue-PulseWidth):
11182 AWGAwaveform.append((MinV+MaxV)/2.0)
11183 if AWGABurstFlag.get() == 1:
11184 TempOneCycle = AWGAwaveform
11185 for i
in range(AWGACycles-1):
11186 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
11187 TempDelay = int(AWGABurstDelay*SamplesPermS)
11188 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'edge')
11190 duty1lab.config(text =
"Duty Cycle")
11195 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGAFreqvalue
11196 global AWGALength, AWGAperiodvalue, AWG_Amp_Mode
11197 global AWGABurstFlag, AWGACycles, AWGABurstDelay
11198 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
11199 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11205 if AWGAFreqvalue > 0.0:
11206 if AWG_2X.get() == 1:
11207 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
11208 SamplesPermS = int((BaseSampleRate*2)/1000)
11209 if AWGAperiodvalue % 2 != 0:
11210 AWGAperiodvalue = AWGAperiodvalue + 1
11212 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
11213 SamplesPermS = int(BaseSampleRate/1000)
11215 AWGAperiodvalue = 0.0
11216 if AWG_Amp_Mode.get() == 1:
11217 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
11218 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
11220 if AWGAAmplvalue > AWGAOffsetvalue:
11221 MinV = AWGAOffsetvalue
11222 MaxV = AWGAAmplvalue
11224 MaxV = AWGAOffsetvalue
11225 MinV = AWGAAmplvalue
11227 AWGAwaveform = numpy.random.uniform(MinV, MaxV, int(AWGAperiodvalue))
11228 Mid = (MaxV+MinV)/2.0
11229 if AWGABurstFlag.get() == 1:
11230 TempOneCycle = AWGAwaveform
11231 for i
in range(AWGACycles-1):
11232 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
11233 TempDelay = int(AWGABurstDelay*SamplesPermS)
11234 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
11240 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGAFreqvalue
11241 global AWGALength, AWGAperiodvalue, AWG_Amp_Mode
11242 global AWGABurstFlag, AWGACycles, AWGABurstDelay
11243 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
11244 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11250 if AWGAFreqvalue > 0.0:
11251 if AWG_2X.get() == 1:
11252 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
11253 SamplesPermS = int((BaseSampleRate*2)/1000)
11254 if AWGAperiodvalue % 2 != 0:
11255 AWGAperiodvalue = AWGAperiodvalue + 1
11257 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
11258 SamplesPermS = int(BaseSampleRate/1000)
11260 AWGAperiodvalue = 0.0
11261 if AWG_Amp_Mode.get() == 1:
11262 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
11263 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
11265 if AWGAAmplvalue > AWGAOffsetvalue:
11266 MinV = AWGAOffsetvalue
11267 MaxV = AWGAAmplvalue
11269 MaxV = AWGAOffsetvalue
11270 MinV = AWGAAmplvalue
11272 AWGAwaveform = numpy.random.normal((MinV+MaxV)/2, (MaxV-MinV)/3, int(AWGAperiodvalue))
11273 Mid = (MaxV+MinV)/2.0
11274 if AWGABurstFlag.get() == 1:
11275 TempOneCycle = AWGAwaveform
11276 for i
in range(AWGACycles-1):
11277 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
11278 TempDelay = int(AWGABurstDelay*SamplesPermS)
11279 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
11285 global AWGAMode, AWGAIOMode, AWGAModeLabel, DevID, session, devx, DevOne, CHA, HWRevOne
11286 global EnableScopeOnly, AWG_Amp_Mode
11288 if AWGAMode.get() == 0:
11290 elif AWGAMode.get() == 1:
11292 elif AWGAMode.get() == 2:
11294 if AWGAIOMode.get() > 0:
11295 if HWRevOne ==
"D":
11296 if AWGAMode.get() == 0:
11300 label_txt = label_txt +
" Split I/O"
11301 if EnableScopeOnly == 0:
11302 label_txt = label_txt +
" Mode"
11303 AWGAModeLabel.config(text = label_txt )
11308 global AWGAAmplvalue, AWGAOffsetvalue, EnableScopeOnly
11309 global AWGAFreqvalue, AWGAPhasevalue, AWGAPhaseDelay
11310 global AWGADutyCyclevalue, FSweepMode, AWGARepeatFlag, AWGSync
11311 global AWGAWave, AWGAMode, AWGATerm, AWGAwaveform, AWGAIOMode
11312 global CHA, CHB, AWGSAMPLErate, DevID, devx, HWRevOne, AWG_Amp_Mode
11313 global amp1lab, off1lab, AWGA2X, AWGA2X, AWGBWave, AWGBRepeatFlag
11314 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11323 if AWG_Amp_Mode.get() == 0:
11324 amp1lab.config(text =
"Min Ch A" )
11325 off1lab.config(text =
"Max Ch A" )
11327 amp1lab.config(text =
"Amp Ch A" )
11328 off1lab.config(text =
"Off Ch A" )
11330 if AWGAFreqvalue > 0.0:
11331 AWGAperiodvalue = AWGSAMPLErate/AWGAFreqvalue
11333 AWGAperiodvalue = 0.0
11335 if AWGAPhaseDelay.get() == 0:
11336 if AWGAWave ==
'square':
11337 AWGAPhasevalue = AWGAPhasevalue + 270.0
11338 if AWGAPhasevalue > 359:
11339 AWGAPhasevalue = AWGAPhasevalue - 360
11340 if AWGAPhasevalue > 0:
11341 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
11343 AWGAdelayvalue = 0.0
11344 elif AWGAPhaseDelay.get() == 1:
11345 AWGAdelayvalue = AWGAPhasevalue * 100
11347 if AWGATerm.get() == 0:
11348 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
11349 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
11350 elif AWGATerm.get() == 1:
11351 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
11352 devx.ctrl_transfer( 0x40, 0x50, 33, 0, 0, 0, 100)
11353 elif AWGATerm.get() == 2:
11354 devx.ctrl_transfer( 0x40, 0x50, 32, 0, 0, 0, 100)
11355 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
11357 if AWGAWave ==
'dc':
11358 if AWG_2X.get() == 2:
11359 AWGAWave ==
'arbitrary'
11360 CHA.arbitrary(AWGB2X, AWGBRepeatFlag.get())
11362 if AWGAMode.get() == 0:
11363 if AWGAIOMode.get() == 0:
11364 CHA.mode = Mode.SVMI
11366 CHA.mode = Mode.SVMI_SPLIT
11367 CHA.constant(AWGAOffsetvalue)
11369 if AWGAMode.get() == 1:
11370 if AWGAIOMode.get() == 0:
11371 CHA.mode = Mode.SIMV
11373 CHA.mode = Mode.SIMV_SPLIT
11374 CHA.constant(AWGAOffsetvalue/1000)
11376 if AWGAMode.get() == 2:
11377 if AWGAIOMode.get() == 0:
11378 CHA.mode = Mode.HI_Z
11380 CHA.mode = Mode.HI_Z_SPLIT
11382 if AWGAIOMode.get() > 0:
11383 if HWRevOne ==
"D":
11385 CHA.mode = Mode.SIMV_SPLIT
11388 if AWGAMode.get() == 0:
11389 if AWGAIOMode.get() == 0:
11390 CHA.mode = Mode.SVMI
11392 CHA.mode = Mode.SVMI_SPLIT
11393 if AWGAMode.get() == 1:
11394 if AWGAIOMode.get() == 0:
11395 CHA.mode = Mode.SIMV
11397 CHA.mode = Mode.SIMV_SPLIT
11398 AWGAOffsetvalue = AWGAOffsetvalue/1000
11399 AWGAAmplvalue = AWGAAmplvalue/1000
11400 if AWGAMode.get() == 2:
11401 if AWGAIOMode.get() == 0:
11402 CHA.mode = Mode.HI_Z
11404 CHA.mode = Mode.HI_Z_SPLIT
11406 if AWG_Amp_Mode.get() == 1:
11407 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
11408 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
11410 MaxV = AWGAOffsetvalue
11411 MinV = AWGAAmplvalue
11413 if AWGAWave ==
'sine':
11414 CHA.sine(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
11415 elif AWGAWave ==
'triangle':
11416 CHA.triangle(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
11417 elif AWGAWave ==
'sawtooth':
11418 CHA.sawtooth(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
11419 elif AWGAWave ==
'square':
11420 CHA.square(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue, AWGADutyCyclevalue)
11421 elif AWGAWave ==
'stairstep':
11422 CHA.stairstep(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
11423 elif AWGAWave ==
'arbitrary':
11424 if EnableScopeOnly == 0:
11426 if AWGSync.get() == 0:
11427 AWGARepeatFlag.set(1)
11428 if AWG_2X.get() == 2:
11429 AWGAWave ==
'arbitrary'
11430 CHA.arbitrary(AWGB2X, AWGBRepeatFlag.get())
11432 CHA.arbitrary(AWGAwaveform, AWGARepeatFlag.get())
11435 if AWGAIOMode.get() > 0:
11436 if HWRevOne ==
"D":
11438 CHA.mode = Mode.SIMV_SPLIT
11441 global AWG_2X, AWGB2X, AWGAwaveform
11442 global AWGANoiseEntry, AWGAsbnoise, AWGANoisevalue
11444 if AWGAsbnoise.get() ==
"None":
11448 AWGANoisevalue = float(eval(AWGANoiseEntry.get()))
11450 AWGANoiseEntry.delete(0,
"end")
11451 AWGANoiseEntry.insert(0, AWGANoisevalue)
11452 if AWGANoisevalue == 0.0:
11455 if AWGAsbnoise.get() ==
"Gaussian":
11456 AWGANoiseform = numpy.random.normal(0.0, abs((AWGANoisevalue)/3), len(AWGAwaveform))
11458 AWGANoiseform = numpy.random.uniform((-AWGANoisevalue)/2, (AWGANoisevalue)/2, len(AWGAwaveform))
11459 AWGAwaveform = AWGAwaveform + AWGANoiseform
11460 if AWG_2X.get() == 2:
11461 if AWGAsbnoise.get() ==
"Gaussian":
11462 AWGANoiseform = numpy.random.normal(0.0, abs((AWGANoisevalue)/3), len(AWGB2X))
11464 AWGANoiseform = numpy.random.uniform((-AWGANoisevalue)/2, (AWGANoisevalue)/2, len(AWGB2X))
11465 AWGB2X = AWGB2X + AWGANoiseform
11468 global AWGAAmplEntry, AWGBAmplEntry, AWGAOffsetEntry, AWGBOffsetEntry, AWGAFreqEntry, AWGBFreqEntry
11469 global AWGAPhaseEntry, AWGBPhaseEntry, AWGADutyCycleEntry, AWGBDutyCycleEntry, AWGAShape, AWGBShape
11470 global BisCompA, AWGAWave
11474 if AWGAWave ==
'dc':
11475 AWGBAmplvalue = float(eval(AWGAAmplEntry.get()))
11476 AWGBOffsetvalue = 2.5 - (float(eval(AWGAOffsetEntry.get()))-2.5)
11477 AWGBAmplEntry.delete(0,
"end")
11478 AWGBAmplEntry.insert(0, AWGBAmplvalue)
11479 AWGBOffsetEntry.delete(0,
"end")
11480 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
11482 AWGBAmplvalue = float(eval(AWGAAmplEntry.get()))
11483 AWGBOffsetvalue = float(eval(AWGAOffsetEntry.get()))
11484 AWGBAmplEntry.delete(0,
"end")
11485 AWGBAmplEntry.insert(0, AWGBOffsetvalue)
11486 AWGBOffsetEntry.delete(0,
"end")
11487 AWGBOffsetEntry.insert(0, AWGBAmplvalue)
11489 AWGBFreqvalue = float(eval(AWGAFreqEntry.get()))
11490 AWGBFreqEntry.delete(0,
"end")
11491 AWGBFreqEntry.insert(0, AWGBFreqvalue)
11492 AWGBPhasevalue = float(eval(AWGAPhaseEntry.get()))
11493 AWGBPhaseEntry.delete(0,
"end")
11494 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
11495 AWGBDutyCyclevalue = float(eval(AWGADutyCycleEntry.get()))
11496 AWGBDutyCycleEntry.delete(0,
"end")
11497 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
11498 AWGBShape.set(AWGAShape.get())
11505 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
11507 if AWGBBurstFlag.get() == 1:
11508 AWGBCyclesString = askstring(
"AWG B Burst Mode",
"Current number of cycles " + str(AWGBCycles) +
"\n\nNew number of cycles:\n", initialvalue=str(AWGBCycles), parent=awgwindow)
11509 if (AWGBCyclesString ==
None):
11511 AWGBCycles = int(AWGBCyclesString)
11512 AWGBDelayString = askstring(
"AWG B Burst Mode",
"Current Burst delay " + str(AWGBBurstDelay) +
"\n\nNew burst delay in mS:\n", initialvalue=str(AWGBBurstDelay), parent=awgwindow)
11513 if (AWGBDelayString ==
None):
11515 AWGBBurstDelay = float(AWGBDelayString)
11519 global AWGBAmplEntry, AWGBAmplvalue, AWGBMode, AWG_Amp_Mode
11520 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11523 AWGBAmplvalue = float(eval(AWGBAmplEntry.get()))
11525 AWGBAmplEntry.delete(0,
"end")
11526 AWGBAmplEntry.insert(0, AWGBAmplvalue)
11528 if AWGBMode.get() == 0:
11529 if AWG_Amp_Mode.get() == 0:
11530 if AWGBAmplvalue > 5.00:
11531 AWGBAmplvalue = 5.00
11532 AWGBAmplEntry.delete(0,
"end")
11533 AWGBAmplEntry.insert(0, AWGBAmplvalue)
11534 if AWGBAmplvalue < 0.00:
11535 AWGBAmplvalue = 0.00
11536 AWGBAmplEntry.delete(0,
"end")
11537 AWGBAmplEntry.insert(0, AWGBAmplvalue)
11538 elif AWG_Amp_Mode.get() == 1:
11539 if AWGBAmplvalue > (2.5 / AWGB_Ext_Gain.get()):
11540 AWGBAmplvalue = 2.5 / AWGB_Ext_Gain.get()
11541 AWGBAmplEntry.delete(0,
"end")
11542 AWGBAmplEntry.insert(0, AWGBAmplvalue)
11543 if AWGBAmplvalue < (-2.50 / AWGB_Ext_Gain.get()):
11544 AWGBAmplvalue = -2.50 / AWGB_Ext_Gain.get()
11545 AWGBAmplEntry.delete(0,
"end")
11546 AWGBAmplEntry.insert(0, AWGBAmplvalue)
11547 elif AWGBMode.get() == 1:
11548 if AWGBAmplvalue > 200.00:
11549 AWGBAmplvalue = 200.00
11550 AWGBAmplEntry.delete(0,
"end")
11551 AWGBAmplEntry.insert(0, AWGBAmplvalue)
11552 if AWGBAmplvalue < -200.00:
11553 AWGBAmplvalue = -200.00
11554 AWGBAmplEntry.delete(0,
"end")
11555 AWGBAmplEntry.insert(0, AWGBAmplvalue)
11558 global AWGBOffsetEntry, AWGBOffsetvalue, AWGBMode, AWG_Amp_Mode
11559 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11562 AWGBOffsetvalue = float(eval(AWGBOffsetEntry.get()))
11564 AWGBOffsetEntry.delete(0,
"end")
11565 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
11566 if AWG_Amp_Mode.get() == 0:
11567 if AWGBMode.get() == 0:
11568 if AWGBOffsetvalue > 5.00:
11569 AWGBOffsetvalue = 5.00
11570 AWGBOffsetEntry.delete(0,
"end")
11571 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
11572 if AWGBOffsetvalue < 0.00:
11573 AWGBOffsetvalue = 0.00
11574 AWGBOffsetEntry.delete(0,
"end")
11575 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
11576 elif AWG_Amp_Mode.get() == 1:
11577 if AWGBOffsetvalue > (2.50-AWGB_Ext_Offset.get()):
11578 AWGBOffsetvalue = 2.50-AWGB_Ext_Offset.get()
11579 AWGBOffsetEntry.delete(0,
"end")
11580 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
11581 if AWGBOffsetvalue < (-2.50-AWGB_Ext_Offset.get()):
11582 AWGBOffsetvalue = -2.50-AWGB_Ext_Offset.get()
11583 AWGBOffsetEntry.delete(0,
"end")
11584 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
11585 if AWGBMode.get() == 1:
11586 if AWGBOffsetvalue > 200.00:
11587 AWGBOffsetvalue = 200.00
11588 AWGBOffsetEntry.delete(0,
"end")
11589 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
11590 if AWGBOffsetvalue < -200.00:
11591 AWGBOffsetvalue = -200.00
11592 AWGBOffsetEntry.delete(0,
"end")
11593 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
11596 global AWGBFreqEntry, AWGBFreqvalue, AWG_2X
11597 global BodeScreenStatus, BodeDisp
11600 AWGBFreqvalue = float(eval(AWGBFreqEntry.get()))
11602 AWGBFreqEntry.delete(0,
"end")
11603 AWGBFreqEntry.insert(0, AWGBFreqvalue)
11604 if AWG_2X.get() == 2:
11605 if BodeScreenStatus.get() > 0
and BodeDisp.get() > 0:
11606 if AWGBFreqvalue > 90000:
11607 AWGBFreqvalue = 90000
11608 AWGBFreqEntry.delete(0,
"end")
11609 AWGBFreqEntry.insert(0, AWGBFreqvalue)
11611 if AWGBFreqvalue > 50000:
11612 AWGBFreqvalue = 50000
11613 AWGBFreqEntry.delete(0,
"end")
11614 AWGBFreqEntry.insert(0, AWGBFreqvalue)
11616 if AWGBFreqvalue > 25000:
11617 AWGBFreqvalue = 25000
11618 AWGBFreqEntry.delete(0,
"end")
11619 AWGBFreqEntry.insert(0, AWGBFreqvalue)
11620 if AWGBFreqvalue < 0:
11622 AWGBFreqEntry.delete(0,
"end")
11623 AWGBFreqEntry.insert(0, AWGBFreqvalue)
11627 global AWGBPhaseDelay, phaseblab, awgbph, awgbdel
11629 if AWGBPhaseDelay.get() == 1:
11630 AWGBPhaseDelay.set(0)
11631 awgbph.configure(text=
"Phase")
11632 phaseblab.configure(text=
"Deg")
11633 elif AWGBPhaseDelay.get() == 0:
11634 AWGBPhaseDelay.set(1)
11635 awgbph.configure(text=
"Delay")
11636 phaseblab.configure(text=
"mSec")
11639 global AWGBPhaseDelay, phaseblab, awgbph, awgbdel
11641 if AWGBPhaseDelay.get() == 0:
11642 phaseblab.configure(text=
"Deg")
11643 awgbph.configure(text=
"Phase")
11644 elif AWGBPhaseDelay.get() == 1:
11645 phaseblab.configure(text=
"mSec")
11646 awgbph.configure(text=
"Delay")
11649 global AWGBPhaseEntry, AWGBPhasevalue
11652 AWGBPhasevalue = float(eval(AWGBPhaseEntry.get()))
11654 AWGBPhaseEntry.delete(0,
"end")
11655 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
11657 if AWGBPhasevalue > 360:
11658 AWGBPhasevalue = 360
11659 AWGBPhaseEntry.delete(0,
"end")
11660 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
11661 if AWGBPhasevalue < 0:
11663 AWGBPhaseEntry.delete(0,
"end")
11664 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
11667 global AWGBDutyCycleEntry, AWGBDutyCyclevalue
11670 AWGBDutyCyclevalue = float(eval(AWGBDutyCycleEntry.get()))/100
11672 AWGBDutyCycleEntry.delete(0,
"end")
11673 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
11675 if AWGBDutyCyclevalue > 1:
11676 AWGBDutyCyclevalue = 1
11677 AWGBDutyCycleEntry.delete(0,
"end")
11678 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue*100)
11679 if AWGBDutyCyclevalue < 0:
11680 AWGBDutyCyclevalue = 0
11681 AWGBDutyCycleEntry.delete(0,
"end")
11682 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
11686 global AWGBShape, AWGBWave, duty2lab, AWG_2X, CHA, CHB
11688 if AWGBShape.get() == 0:
11690 duty2lab.config(text=
"%")
11692 if AWGBShape.get() == 1:
11694 duty2lab.config(text=
"%")
11696 if AWGBShape.get() == 2:
11697 AWGBWave =
'triangle'
11698 duty2lab.config(text=
"%")
11700 if AWGBShape.get() == 3:
11701 AWGBWave =
'sawtooth'
11702 duty2lab.config(text=
"%")
11704 if AWGBShape.get() == 4:
11705 AWGBWave =
'square'
11706 duty2lab.config(text=
"%")
11708 if AWGBShape.get() == 5:
11709 AWGBWave =
'stairstep'
11710 duty2lab.config(text=
"%")
11712 if AWGBShape.get() > 5:
11713 AWGBWave =
'arbitrary'
11714 if AWG_2X.get() == 1:
11715 CHB.mode = CHA.mode
11716 AWGBWave =
'arbitrary'
11720 global AWGBwaveform, AWGBLength, awgwindow, AWG_2X, AWGB2X, AWGBcsvFile
11723 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
11724 AWGBcsvFile = filename
11728 global AWGBwaveform, AWGBLength, awgwindow, AWG_2X, AWGB2X, AWGBcsvFile
11731 CSVFile = open(AWGBcsvFile)
11735 csv_f = csv.reader(CSVFile, csv.excel)
11737 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
11743 if len(row) > 1
and ColumnSel == 0:
11744 RequestColumn = askstring(
"Which Column?",
"File contains 1 to " + str(len(row)) +
" columns\n\nEnter column number to import:\n", initialvalue=1, parent=awgwindow)
11745 ColumnNum = int(RequestColumn) - 1
11746 ColumnLen = str(len(row))
11751 if colnum == ColumnNum:
11752 AWGBwaveform.append(float(col))
11755 print(
'skipping non-numeric row', RowNum)
11757 AWGBwaveform = numpy.array(AWGBwaveform)
11764 global AWG_2X, AWGB2X, AWGBwaveform
11765 global AWGFiltB, AWGFiltBCoef
11768 if AWGFiltB.get() == 1:
11769 BufLen = len(AWGBwaveform)
11770 CoefLen = len(AWGFiltBCoef)/2
11771 AWGBwaveform = numpy.pad(AWGBwaveform, (CoefLen,CoefLen),
'wrap')
11772 AWGBwaveform = numpy.convolve(AWGBwaveform, AWGFiltBCoef)
11773 AWGBwaveform = numpy.roll(AWGBwaveform, -CoefLen)
11774 AWGBwaveform = AWGBwaveform[CoefLen:BufLen+CoefLen]
11776 if AWG_2X.get() == 2:
11779 AWGB2X = AWGBwaveform[::2]
11780 Tempwaveform = AWGBwaveform[1::2]
11781 AWGBwaveform = Tempwaveform
11784 global AWGBwaveform, AWGBLength, awgwindow, AWGBwavFile
11785 global AWG_2X, AWGA2X
11788 filename = askopenfilename(defaultextension =
".wav", filetypes=[(
"WAV files",
"*.wav")], parent=awgwindow)
11789 AWGBwavFile = filename
11793 global AWGBwaveform, AWGBLength, awgwindow, AWGBwavFile
11794 global AWG_2X, AWGA2X
11797 spf = wave.open(AWGBwavFile,
'r')
11799 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
11802 if spf.getnchannels() == 2:
11803 showwarning(
"WARNING",
"Only mono files supported!", parent=awgwindow)
11806 Length = spf.getnframes()
11809 signal = spf.readframes(Length)
11810 WAVsignal = numpy.fromstring(signal,
'Int16')
11812 AWGBwaveform = (WAVsignal * 2.5 / 32768) + 2.5
11813 AWGBwaveform = numpy.array(AWGBwaveform)
11819 global AWGBwaveform, AWGBLength, awgwindow
11821 filename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
11822 numpy.savetxt(filename, AWGBwaveform, delimiter=
",", fmt=
'%2.4f')
11825 global AWGAwaveform, AWGSAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB
11826 global AWGBwaveform, VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGBMathString
11827 global FFTBuffA, FFTBuffB, FFTwindowshape, AWGBLength, awgwindow
11828 global DFiltACoef, DFiltBCoef, AWGBShapeLabel, AWGBLength
11829 global AWG_2X, AWGA2X
11831 TempString = AWGBMathString
11832 AWGBShapeLabel.config(text =
"Math" )
11833 AWGBMathString = askstring(
"AWG B Math Formula",
"Current Formula: " + AWGBMathString +
"\n\nNew Formula:\n", initialvalue=AWGBMathString, parent=awgwindow)
11834 if (AWGBMathString ==
None):
11835 AWGBMathString = TempString
11838 AWGBwaveform = eval(AWGBMathString)
11840 showwarning(
"Syntax Error",
"Syntax Error in entered string!", parent=awgwindow)
11841 AWGBwaveform = numpy.array(AWGBwaveform)
11843 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
11847 global AWGAwaveform, AWGSAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB
11848 global AWGBwaveform, VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGBMathString
11849 global FFTBuffA, FFTBuffB, FFTwindowshape, AWGBLength, awgwindow
11850 global DFiltACoef, DFiltBCoef, AWGBShapeLabel
11851 global AWG_2X, AWGA2X
11853 AWGBwaveform = eval(AWGBMathString)
11854 AWGBwaveform = numpy.array(AWGBwaveform)
11859 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBFreqvalue, awgwindow
11860 global AWG_Amp_Mode
11861 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, duty2lab
11862 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11864 Max_term = int(AWGBDutyCyclevalue*100)
11869 if AWG_2X.get() == 1:
11870 TempRate = (BaseSampleRate*2)
11872 TempRate = BaseSampleRate
11874 AWGBwaveform = numpy.cos(numpy.linspace(0, 2*numpy.pi, int(TempRate/AWGBFreqvalue)))
11876 while k <= Max_term:
11878 Harmonic = (math.sin(k*numpy.pi/2)/k)*(numpy.cos(numpy.linspace(0, k*2*numpy.pi, int(TempRate/AWGBFreqvalue))))
11879 AWGBwaveform = AWGBwaveform + Harmonic
11881 if AWG_Amp_Mode.get() == 0:
11882 amplitude = (AWGBOffsetvalue-AWGBAmplvalue)/2
11883 offset = (AWGBOffsetvalue+AWGBAmplvalue)/2
11885 amplitude = AWGBAmplvalue*AWGB_Ext_Gain.get()
11886 offset = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get()
11887 AWGBwaveform = (AWGBwaveform * amplitude) + offset
11889 duty2lab.config(text=
"Harmonics")
11894 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBperiodvalue
11895 global AWGBDutyCyclevalue, AWGBFreqvalue, duty2lab, AWGBgain, AWGBoffset, AWGBPhaseDelay, AWGBMode
11896 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate, AWG_Amp_Mode
11897 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset, AWGRecLength
11905 if AWGBFreqvalue < 10.0:
11911 if AWGBFreqvalue > 0.0:
11912 if AWG_2X.get() == 2:
11913 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
11915 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
11917 AWGBperiodvalue = 10.0
11919 if AWGBPhaseDelay.get() == 0:
11920 if AWGBPhasevalue > 0:
11921 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
11923 AWGBdelayvalue = 0.0
11924 elif AWGBPhaseDelay.get() == 1:
11925 AWGBdelayvalue = AWGBPhasevalue * AWGSAMPLErate / 1000
11926 Cycles = int(AWGRecLength/AWGBperiodvalue)
11929 RecLength = int(Cycles * AWGBperiodvalue)
11930 if RecLength % 2 != 0:
11931 RecLength = RecLength + 1
11933 AWGBwaveform = numpy.cos(numpy.linspace(0, 2*Cycles*numpy.pi, RecLength))
11935 if AWG_Amp_Mode.get() == 0:
11936 if AWGBMode.get() == 1:
11937 amplitude = (AWGBOffsetvalue-AWGBAmplvalue) / -2000.0
11938 offset = (AWGBOffsetvalue+AWGBAmplvalue) / 2000.0
11940 amplitude = (AWGBOffsetvalue-AWGBAmplvalue) / -2.0
11941 offset = (AWGBOffsetvalue+AWGBAmplvalue) / 2.0
11943 if AWGBMode.get() == 1:
11944 amplitude = AWGBAmplvalue/1000.0
11945 offset = AWGBOffsetvalue/1000.0
11947 amplitude = AWGBAmplvalue*AWGB_Ext_Gain.get()
11948 offset = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get()
11949 AWGBwaveform = (AWGBwaveform * amplitude) + offset
11950 AWGBwaveform = numpy.roll(AWGBwaveform, int(AWGBdelayvalue))
11952 if AWG_2X.get() == 2:
11955 AWGB2X = AWGBwaveform[::2]
11956 Tempwaveform = AWGBwaveform[1::2]
11957 AWGBwaveform = Tempwaveform
11959 duty2lab.config(text=
"%")
11963 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength
11964 global AWGBDutyCyclevalue, AWGBFreqvalue, AWG_Amp_Mode
11965 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
11966 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11974 if AWGBFreqvalue > 0.0:
11975 if AWG_2X.get() == 2:
11976 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
11978 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
11980 AWGBperiodvalue = 0.0
11981 if AWG_Amp_Mode.get() == 1:
11982 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
11983 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
11985 MaxV = AWGBOffsetvalue
11986 MinV = AWGBAmplvalue
11988 PulseWidth = int(AWGBDutyCyclevalue*100)
11989 PulseSamples = int(AWGBperiodvalue/PulseWidth)
11991 for i
in range(PulseSamples):
11992 v = round(PulseWidth/2*(1+numpy.sin(i*2*numpy.pi/PulseSamples)))
11994 for j
in range(PulseWidth):
11996 AWGBwaveform.append(MaxV)
11998 AWGBwaveform.append(MinV)
12000 duty2lab.config(text=
"PWidth")
12004 global AWGBwaveform, AWGSampleRate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBperiodvalue
12005 global AWGBDutyCyclevalue, AWGBFreqvalue, duty2lab, AWGBgain, AWGBoffset, AWGBPhaseDelay
12006 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate, AWG_Amp_Mode
12007 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12015 if AWGBFreqvalue > 0.0:
12016 if AWG_2X.get() == 1:
12017 AWGBperiodvalue = int((BaseSampleRate*2)/AWGBFreqvalue)
12018 if AWGBperiodvalue % 2 != 0:
12019 AWGBperiodvalue = AWGBperiodvalue + 1
12021 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
12023 AWGBperiodvalue = 0.0
12024 if AWG_Amp_Mode.get() == 1:
12025 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12026 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12028 MaxV = AWGBOffsetvalue
12029 MinV = AWGBAmplvalue
12031 if AWGBPhaseDelay.get() == 0:
12032 if AWGBPhasevalue > 0:
12033 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
12035 AWGBdelayvalue = 0.0
12036 elif AWGBPhaseDelay.get() == 1:
12037 AWGBdelayvalue = AWGBPhasevalue * SAMPLErate / 1000
12039 Cycles = int(AWGBDutyCyclevalue*100)
12040 NCycles = -1 * Cycles
12042 AWGBwaveform = numpy.sinc(numpy.linspace(NCycles, Cycles, int(SAMPLErate/AWGBFreqvalue)))
12043 amplitude = (MaxV-MinV) / 2.0
12044 offset = (MaxV+MinV) / 2.0
12045 AWGBwaveform = (AWGBwaveform * amplitude) + offset
12046 Cycles = int(37500/AWGBperiodvalue)
12050 Extend = int((Cycles-1.0)*AWGBperiodvalue/2.0)
12051 AWGBwaveform = numpy.pad(AWGBwaveform, (Extend,Extend),
'wrap')
12052 AWGBwaveform = numpy.roll(AWGBwaveform, int(AWGBdelayvalue))
12054 duty2lab.config(text=
"Cycles")
12059 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
12060 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
12061 global AWG_Amp_Mode
12062 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
12063 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
12064 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12072 if AWGBFreqvalue > 0.0:
12073 if AWG_2X.get() == 2:
12074 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
12075 SamplesPermS = int((BaseSampleRate*2)/1000)
12077 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
12078 SamplesPermS = int(BaseSampleRate/1000)
12080 AWGBperiodvalue = 0.0
12081 if AWG_Amp_Mode.get() == 1:
12082 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12083 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12085 MaxV = AWGBOffsetvalue
12086 MinV = AWGBAmplvalue
12088 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
12089 if SlopeValue <= 0:
12091 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
12094 Remainder = int((AWGBperiodvalue - PulseWidth - SlopeValue)/2)
12097 PulseWidth = PulseWidth - SlopeValue
12100 StepAmp = (MaxV - MinV)/2
12101 StepOff = (MaxV + MinV)/2
12102 AWGBwaveform = StepAmp * (numpy.cos(numpy.linspace(0, 2*numpy.pi, SlopeValue*2))) + StepOff
12103 MidArray = numpy.ones(PulseWidth) * MinV
12104 AWGBwaveform = numpy.insert(AWGBwaveform, SlopeValue, MidArray)
12105 AWGBwaveform = numpy.pad(AWGBwaveform, (Remainder, Remainder),
'edge')
12106 if AWGBBurstFlag.get() == 1:
12107 TempOneCycle = AWGBwaveform
12108 for i
in range(AWGBCycles-1):
12109 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
12110 TempDelay = int(AWGBBurstDelay*SamplesPermS)
12111 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
12113 duty2lab.config(text=
"%")
12114 phaseblab.config(text =
"Rise Time")
12118 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
12119 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
12120 global AWG_Amp_Mode
12121 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
12122 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
12123 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12131 if AWGBFreqvalue > 0.0:
12132 if AWG_2X.get() == 2:
12133 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
12134 SamplesPermS = int((BaseSampleRate*2)/1000)
12136 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
12137 SamplesPermS = int(BaseSampleRate/1000)
12139 AWGBperiodvalue = 0.0
12140 if AWG_Amp_Mode.get() == 1:
12141 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12142 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12144 MaxV = AWGBOffsetvalue
12145 MinV = AWGBAmplvalue
12147 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
12148 if SlopeValue <= 0:
12150 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
12153 Remainder = int(AWGBperiodvalue - PulseWidth) - SlopeValue
12156 PulseWidth = PulseWidth - SlopeValue
12159 StepValue = (MaxV - MinV) / SlopeValue
12161 for i
in range(SlopeValue):
12162 AWGBwaveform.append(SampleValue)
12163 SampleValue = SampleValue + StepValue
12164 for i
in range(PulseWidth):
12165 AWGBwaveform.append(MaxV)
12166 for i
in range(SlopeValue):
12167 AWGBwaveform.append(SampleValue)
12168 SampleValue = SampleValue - StepValue
12169 for i
in range(Remainder):
12170 AWGBwaveform.append(MinV)
12171 if AWGBBurstFlag.get() == 1:
12172 TempOneCycle = AWGBwaveform
12173 for i
in range(AWGBCycles-1):
12174 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
12175 TempDelay = int(AWGBBurstDelay*SamplesPermS)
12176 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
12178 duty2lab.config(text=
"%")
12179 phaseblab.config(text =
"Rise Time")
12183 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
12184 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
12185 global AWG_Amp_Mode
12186 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
12187 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
12188 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12196 AWGBDutyCyclevalue = float(eval(AWGBDutyCycleEntry.get()))
12198 AWGBDutyCycleEntry.delete(0,
"end")
12199 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
12201 if AWGBFreqvalue > 0.0:
12202 if AWG_2X.get() == 2:
12203 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
12204 SamplesPermS = int((BaseSampleRate*2)/1000)
12206 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
12207 SamplesPermS = int(BaseSampleRate/1000)
12209 AWGBperiodvalue = 0.0
12210 if AWG_Amp_Mode.get() == 1:
12211 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12212 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12214 MaxV = AWGBOffsetvalue
12215 MinV = AWGBAmplvalue
12217 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
12218 if SlopeValue <= 0:
12220 PulseWidth = int(AWGBDutyCyclevalue*SamplesPermS)
12223 Remainder = int(AWGBperiodvalue - PulseWidth) - SlopeValue
12226 PulseWidth = PulseWidth - SlopeValue
12229 StepValue = (MaxV - MinV) / SlopeValue
12231 for i
in range(SlopeValue):
12232 AWGBwaveform.append(SampleValue)
12233 SampleValue = SampleValue + StepValue
12234 for i
in range(PulseWidth):
12235 AWGBwaveform.append(MaxV)
12236 for i
in range(SlopeValue):
12237 AWGBwaveform.append(SampleValue)
12238 SampleValue = SampleValue - StepValue
12239 for i
in range(Remainder):
12240 AWGBwaveform.append(MinV)
12241 if AWGBBurstFlag.get() == 1:
12242 TempOneCycle = AWGBwaveform
12243 for i
in range(AWGBCycles-1):
12244 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
12245 TempDelay = int(AWGBBurstDelay*SamplesPermS)
12246 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
12248 duty2lab.config(text=
"Width mS")
12249 phaseblab.config(text =
"Rise Time")
12253 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
12254 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
12255 global AWG_Amp_Mode
12256 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
12257 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
12258 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12266 if AWGBFreqvalue > 0.0:
12267 if AWG_2X.get() == 2:
12268 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
12269 SamplesPermS = int((BaseSampleRate*2)/1000)
12271 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
12272 SamplesPermS = int(BaseSampleRate/1000)
12274 AWGBperiodvalue = 0.0
12275 if AWG_Amp_Mode.get() == 1:
12276 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12277 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12279 MaxV = AWGBOffsetvalue
12280 MinV = AWGBAmplvalue
12282 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
12283 if SlopeValue <= 0:
12285 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
12288 Remainder = int(AWGBperiodvalue - PulseWidth)
12291 PulseWidth = PulseWidth - SlopeValue
12294 StepValue = (MaxV - MinV) / SlopeValue
12296 for i
in range(SlopeValue):
12297 AWGBwaveform.append(SampleValue)
12298 SampleValue = SampleValue + StepValue
12299 for i
in range(PulseWidth):
12300 AWGBwaveform.append(MaxV)
12301 for i
in range(Remainder):
12302 AWGBwaveform.append(MinV)
12303 if AWGBBurstFlag.get() == 1:
12304 TempOneCycle = AWGBwaveform
12305 for i
in range(AWGBCycles-1):
12306 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
12307 TempDelay = int(AWGBBurstDelay*SamplesPermS)
12308 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
12310 duty2lab.config(text=
"%")
12311 phaseblab.config(text =
"Slope Time")
12315 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
12316 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
12317 global AWG_Amp_Mode
12318 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
12319 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
12320 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12328 if AWGBFreqvalue > 0.0:
12329 if AWG_2X.get() == 2:
12330 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
12331 SamplesPermS = int((BaseSampleRate*2)/1000)
12333 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
12334 SamplesPermS = int(BaseSampleRate/1000)
12336 AWGBperiodvalue = 0.0
12337 if AWG_Amp_Mode.get() == 1:
12338 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12339 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12341 MaxV = AWGBOffsetvalue
12342 MinV = AWGBAmplvalue
12344 if AWGBPhaseDelay.get() == 0:
12345 if AWGBPhasevalue > 0:
12346 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
12348 AWGBdelayvalue = 0.0
12349 elif AWGBPhaseDelay.get() == 1:
12350 AWGBdelayvalue = AWGBPhasevalue * AWGSAMPLErate / 1000
12353 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
12356 Remainder = int(AWGBperiodvalue - PulseWidth)
12359 UpStepValue = (MaxV - MinV) / PulseWidth
12360 DownStepValue = (MaxV - MinV) / Remainder
12362 for i
in range(PulseWidth):
12363 AWGBwaveform.append(SampleValue)
12364 SampleValue = SampleValue + UpStepValue
12365 for i
in range(Remainder):
12366 AWGBwaveform.append(SampleValue)
12367 SampleValue = SampleValue - DownStepValue
12368 AWGBwaveform = numpy.roll(AWGBwaveform, int(AWGBdelayvalue))
12369 if AWGBBurstFlag.get() == 1:
12370 TempOneCycle = AWGBwaveform
12371 for i
in range(AWGBCycles-1):
12372 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
12373 TempDelay = int(AWGBBurstDelay*SamplesPermS)
12374 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
12377 duty2lab.config(text =
"Symmetry")
12382 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
12383 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
12384 global AWG_Amp_Mode
12385 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
12386 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
12387 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12395 if AWGBFreqvalue > 0.0:
12396 if AWG_2X.get() == 2:
12397 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
12398 SamplesPermS = int((BaseSampleRate*2)/1000)
12400 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
12401 SamplesPermS = int(BaseSampleRate/1000)
12403 AWGBperiodvalue = 0.0
12404 if AWG_Amp_Mode.get() == 1:
12405 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12406 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12408 MaxV = AWGBOffsetvalue
12409 MinV = AWGBAmplvalue
12411 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue / 2)
12412 if AWGBPhaseDelay.get() == 0:
12413 DelayValue = int(AWGBperiodvalue*(AWGBPhasevalue/360))
12414 elif AWGBPhaseDelay.get() == 1:
12415 DelayValue = int(AWGBPhasevalue*SamplesPermS)
12416 for i
in range(DelayValue-PulseWidth):
12417 AWGBwaveform.append((MinV+MaxV)/2)
12418 for i
in range(PulseWidth):
12419 AWGBwaveform.append(MaxV)
12420 for i
in range(PulseWidth):
12421 AWGBwaveform.append(MinV)
12422 DelayValue = int(AWGBperiodvalue-DelayValue)
12423 for i
in range(DelayValue-PulseWidth):
12424 AWGBwaveform.append((MinV+MaxV)/2)
12425 if AWGBBurstFlag.get() == 1:
12426 TempOneCycle = AWGBwaveform
12427 for i
in range(AWGBCycles-1):
12428 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
12429 TempDelay = int(AWGBBurstDelay*SamplesPermS)
12430 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
12432 duty2lab.config(text =
"Duty Cycle")
12437 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBFreqvalue
12438 global AWGBLength, AWGBperiodvalue, AWG_Amp_Mode
12439 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
12440 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
12441 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12447 if AWGBFreqvalue > 0.0:
12448 if AWG_2X.get() == 2:
12449 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
12450 SamplesPermS = int((BaseSampleRate*2)/1000)
12452 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
12453 SamplesPermS = int(BaseSampleRate/1000)
12455 AWGBperiodvalue = 0.0
12457 if AWGBAmplvalue > AWGBOffsetvalue:
12458 MinV = AWGBOffsetvalue
12459 MaxV = AWGBAmplvalue
12461 MaxV = AWGBOffsetvalue
12462 MinV = AWGBAmplvalue
12463 if AWG_Amp_Mode.get() == 1:
12464 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12465 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12467 AWGBwaveform = numpy.random.uniform(MinV, MaxV, int(AWGBperiodvalue))
12468 Mid = (MaxV+MinV)/2
12469 if AWGBBurstFlag.get() == 1:
12470 TempOneCycle = AWGBwaveform
12471 for i
in range(AWGBCycles-1):
12472 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
12473 TempDelay = int(AWGBBurstDelay*SamplesPermS)
12474 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
12480 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBFreqvalue
12481 global AWGBLength, AWGBperiodvalue, AWG_Amp_Mode
12482 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
12483 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
12484 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12490 if AWGBFreqvalue > 0.0:
12491 if AWG_2X.get() == 2:
12492 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
12493 SamplesPermS = int((BaseSampleRate*2)/1000)
12495 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
12496 SamplesPermS = int(BaseSampleRate/1000)
12498 AWGBperiodvalue = 0.0
12499 if AWGBAmplvalue > AWGBOffsetvalue:
12500 MinV = AWGBOffsetvalue
12501 MaxV = AWGBAmplvalue
12503 MaxV = AWGBOffsetvalue
12504 MinV = AWGBAmplvalue
12505 if AWG_Amp_Mode.get() == 1:
12506 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12507 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12509 AWGBwaveform = numpy.random.normal((MinV+MaxV)/2, (MaxV-MinV)/3, int(AWGBperiodvalue))
12510 Mid = (MaxV+MinV)/2
12511 if AWGBBurstFlag.get() == 1:
12512 TempOneCycle = AWGBwaveform
12513 for i
in range(AWGBCycles-1):
12514 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
12515 TempDelay = int(AWGBBurstDelay*SamplesPermS)
12516 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
12522 global AWGBMode, AWGBIOMode, AWGBModeLabel, DevID, devx, DevOne, CHB, HWRevOne
12523 global EnableScopeOnly
12525 if AWGBMode.get() == 0:
12527 elif AWGBMode.get() == 1:
12529 elif AWGBMode.get() == 2:
12531 if AWGBIOMode.get() > 0:
12532 if HWRevOne ==
"D":
12533 if AWGBMode.get() == 0:
12537 label_txt = label_txt +
" Split I/O"
12538 if EnableScopeOnly == 0:
12539 label_txt = label_txt +
" Mode"
12540 AWGBModeLabel.config(text = label_txt )
12545 global AWGBAmplvalue, AWGBOffsetvalue, AWGA2X, AWG_2X
12546 global AWGBFreqvalue, AWGBPhasevalue, AWGBPhaseDelay
12547 global AWGBDutyCyclevalue, FSweepMode, AWGBRepeatFlag, AWGSync
12548 global AWGBWave, AWGBMode, AWGBTerm, AWGBwaveform, AWGBIOMode
12549 global CHA, CHB, AWGSAMPLErate, DevID, devx, HWRevOne
12550 global amp2lab, off2lab, AWG_Amp_Mode
12551 global AWGA2X, AWGB2X, AWGAWave, AWGARepeatFlag, EnableScopeOnly
12552 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12554 if AWG_Amp_Mode.get() == 0:
12555 amp2lab.config(text =
"Min Ch B" )
12556 off2lab.config(text =
"Max Ch B" )
12558 amp2lab.config(text =
"Amp Ch B" )
12559 off2lab.config(text =
"Off Ch B" )
12561 if AWG_2X.get() == 1:
12562 AWGBWave =
'arbitrary'
12563 if AWGBFreqvalue > 0.0:
12564 AWGBperiodvalue = AWGSAMPLErate/AWGBFreqvalue
12566 AWGBperiodvalue = 0.0
12568 if AWGBPhaseDelay.get() == 0:
12569 if AWGBWave ==
'square':
12570 AWGBPhasevalue = AWGBPhasevalue + 270.0
12571 if AWGBPhasevalue > 359:
12572 AWGBPhasevalue = AWGBPhasevalue - 360
12573 if AWGBPhasevalue > 0:
12574 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
12576 AWGBdelayvalue = 0.0
12577 elif AWGBPhaseDelay.get() == 1:
12578 AWGBdelayvalue = AWGBPhasevalue * 100
12580 if AWGBTerm.get() == 0:
12581 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
12582 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
12583 elif AWGBTerm.get() == 1:
12584 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
12585 devx.ctrl_transfer( 0x40, 0x50, 38, 0, 0, 0, 100)
12586 elif AWGBTerm.get() == 2:
12587 devx.ctrl_transfer( 0x40, 0x50, 37, 0, 0, 0, 100)
12588 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
12590 if AWGBWave ==
'dc':
12591 if AWG_2X.get() == 1:
12592 AWGBWave ==
'arbitrary'
12593 CHB.arbitrary(AWGA2X, AWGARepeatFlag.get())
12595 if AWGBMode.get() == 0:
12596 if AWGBIOMode.get() == 0:
12597 CHB.mode = Mode.SVMI
12599 CHB.mode = Mode.SVMI_SPLIT
12600 CHB.constant(AWGBOffsetvalue)
12601 if AWGBMode.get() == 1:
12602 if AWGBIOMode.get() == 0:
12603 CHB.mode = Mode.SIMV
12605 CHB.mode = Mode.SIMV_SPLIT
12606 CHB.constant(AWGBOffsetvalue/1000)
12607 if AWGBMode.get() == 2:
12608 if AWGBIOMode.get() == 0:
12609 CHB.mode = Mode.HI_Z
12611 CHB.mode = Mode.HI_Z_SPLIT
12613 if AWGBIOMode.get() > 0:
12614 if HWRevOne ==
"D":
12616 CHB.mode = Mode.SIMV_SPLIT
12619 if AWGBMode.get() == 0:
12620 if AWGBIOMode.get() == 0:
12621 CHB.mode = Mode.SVMI
12623 CHB.mode = Mode.SVMI_SPLIT
12624 if AWGBMode.get() == 1:
12625 if AWGBIOMode.get() == 0:
12626 CHB.mode = Mode.SIMV
12628 CHB.mode = Mode.SIMV_SPLIT
12629 AWGBOffsetvalue = AWGBOffsetvalue/1000
12630 AWGBAmplvalue = AWGBAmplvalue/1000
12631 if AWGBMode.get() == 2:
12632 if AWGBIOMode.get() == 0:
12633 CHB.mode = Mode.HI_Z
12635 CHB.mode = Mode.HI_Z_SPLIT
12637 if AWG_Amp_Mode.get() == 1:
12638 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12639 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12641 MaxV = AWGBOffsetvalue
12642 MinV = AWGBAmplvalue
12644 if AWGBWave ==
'sine':
12645 CHB.sine(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
12646 elif AWGBWave ==
'triangle':
12647 CHB.triangle(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
12648 elif AWGBWave ==
'sawtooth':
12649 CHB.sawtooth(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
12650 elif AWGBWave ==
'square':
12651 CHB.square(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue, AWGBDutyCyclevalue)
12652 elif AWGBWave ==
'stairstep':
12653 CHB.stairstep(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
12654 elif AWGBWave ==
'arbitrary':
12655 if EnableScopeOnly == 0:
12657 if AWGSync.get() == 0:
12658 AWGBRepeatFlag.set(1)
12659 if AWG_2X.get() == 1:
12660 AWGBWave ==
'arbitrary'
12661 CHB.arbitrary(AWGA2X, AWGARepeatFlag.get())
12663 CHB.arbitrary(AWGBwaveform, AWGBRepeatFlag.get())
12666 if AWGBIOMode.get() > 0:
12667 if HWRevOne ==
"D":
12669 CHB.mode = Mode.SIMV_SPLIT
12672 global AWG_2X, AWGA2X, AWGBwaveform
12673 global AWGBNoiseEntry, AWGBsbnoise, AWGBNoisevalue
12675 if AWGBsbnoise.get() ==
"None":
12679 AWGBNoisevalue = float(eval(AWGBNoiseEntry.get()))
12681 AWGBNoiseEntry.delete(0,
"end")
12682 AWGBNoiseEntry.insert(0, AWGBNoisevalue)
12683 if AWGBNoisevalue == 0.0:
12686 if AWGBsbnoise.get() ==
"Gaussian":
12687 AWGBNoiseform = numpy.random.normal(0.0, abs((AWGBNoisevalue)/3), len(AWGBwaveform))
12689 AWGBNoiseform = numpy.random.uniform((-AWGBNoisevalue)/2, (AWGBNoisevalue)/2, len(AWGBwaveform))
12690 AWGBwaveform = AWGBwaveform + AWGBNoiseform
12691 if AWG_2X.get() == 2:
12692 if AWGBsbnoise.get() ==
"Gaussian":
12693 AWGBNoiseform = numpy.random.normal(0.0, abs((AWGBNoisevalue)/3), len(AWGA2X))
12695 AWGBNoiseform = numpy.random.uniform((-AWGBNoisevalue)/2, (AWGBNoisevalue)/2, len(AWGA2X))
12696 AWGA2X = AWGA2X + AWGBNoiseform
12699 global session, CHA, CHB, AWGSync
12701 if (RUNstatus.get() == 1)
and AWGSync.get() == 0:
12702 if session.continuous:
12712 global AWGAMode, AWGBMode, AWGSync
12713 global CHA, CHB, discontloop, contloop, session
12733 global RUNstatus, AWGSync, session, CHA, CHB, IAScreenStatus, IADisp
12735 if (RUNstatus.get() == 1):
12736 if IAScreenStatus.get() > 0
and IADisp.get() > 0:
12739 if AWGSync.get() == 0:
12742 CHA.mode = Mode.HI_Z_SPLIT
12743 CHB.mode = Mode.HI_Z_SPLIT
12747 elif session.continuous:
12750 CHA.mode = Mode.HI_Z_SPLIT
12751 CHB.mode = Mode.HI_Z_SPLIT
12756 global CANVASwidthF, CANVASheightF, freqwindow
12759 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent=freqwindow)
12760 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=freqwindow)
12761 if MarkerNum > 0
or ColorMode.get() > 0:
12762 Freqca.postscript(file=filename, height=CANVASheightF, width=CANVASwidthF, colormode=
'color', rotate=Orient)
12764 COLORtext =
"#000000"
12767 Freqca.postscript(file=filename, height=CANVASheightF, width=CANVASwidthF, colormode=
'color', rotate=Orient)
12769 COLORtext =
"#ffffff"
12773 print(
"Routine not made yet")
12776 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P
12783 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P
12791 global FreqTraceMode
12793 FreqTraceMode.set(1)
12794 if RUNstatus.get() == 0:
12796 if RUNstatus.get() == 2:
12801 global FreqTraceMode
12803 FreqTraceMode.set(2)
12804 if RUNstatus.get() == 0:
12806 if RUNstatus.get() == 2:
12810 global RUNstatus, TRACEaverage, FreqTraceMode, freqwindow
12812 FreqTraceMode.set(3)
12814 if RUNstatus.get() == 0:
12816 if RUNstatus.get() == 2:
12820 global FreqTraceMode, TRACEresetFreq
12822 if FreqTraceMode.get()==3:
12823 TRACEresetFreq =
True
12826 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMathSA
12827 global T1Fline, T2Fline, T1FRline, T2FRline, TFRMline, TFMline
12828 global T1Pline, T2Pline, T1PRline, T2PRline
12829 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
12830 global PeakxM, PeakyM, PeakMdb, PeakfreqM
12831 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
12832 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
12833 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
12835 if ShowC1_VdB.get() == 1:
12840 PeakfreqRA = PeakfreqA
12841 if ShowC2_VdB.get() == 1:
12846 PeakfreqRB = PeakfreqB
12847 if ShowC1_P.get() == 1:
12849 if ShowC2_P.get() == 1:
12851 if ShowMathSA.get() > 0:
12856 PeakfreqRM = PeakfreqM
12861 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMathBP
12862 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle
12863 global TAFline, TBFline, TAFRline, TBFRline, TBPRMline, TBPMline
12864 global TAPline, TBPline, TAPRline, TBPRline
12865 global TIARline, TIAXline, TIAMagline, TIAAngline
12866 global RefIARline, RefIAXline, RefIAMagline, RefIAAngline
12867 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
12868 global PeakxM, PeakyM, PeakMdb, PeakfreqM
12869 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
12870 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
12871 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
12873 if ShowCA_VdB.get() == 1:
12878 PeakfreqRA = PeakfreqA
12879 if ShowCB_VdB.get() == 1:
12884 PeakfreqRB = PeakfreqB
12885 if ShowCA_P.get() == 1:
12887 if ShowCB_P.get() == 1:
12889 if ShowMathBP.get() > 0:
12890 TBPRMline = TBPMline
12894 PeakfreqRM = PeakfreqM
12895 if Show_Rseries.get() > 0:
12896 RefIARline = TIARline
12897 if Show_Xseries.get() > 0:
12898 RefIAXline = TIAXline
12899 if Show_Magnitude.get() > 0:
12900 RefIAMagline = TIAMagline
12901 if Show_Angle.get() > 0:
12902 RefIAAngline = TIAAngline
12906 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh, FStep, FBins, bodewindow
12907 global SAMPLErate, ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P
12910 if ShowCA_VdB.get() == 1:
12911 TRACEsize = len(FSweepAdB)
12912 elif ShowCA_VdB.get() == 1:
12913 TRACEsize = len(FSweepBdB)
12917 dB = askyesno(
"Mag or dB: ",
"Save amplidude data as dB (Yes) or Mag (No):\n", parent=bodewindow)
12920 tme = strftime(
"%Y%b%d-%H%M%S", gmtime())
12921 filename =
"Bode-" + tme
12922 filename = filename +
".csv"
12924 filename = asksaveasfilename(initialfile = filename, defaultextension =
".csv",
12925 filetypes=[(
"Comma Separated Values",
"*.csv")], parent=bodewindow)
12926 DataFile = open(filename,
'a')
12927 HeaderString =
'Frequency-#, '
12928 if ShowCA_VdB.get() == 1:
12930 HeaderString = HeaderString +
'CA-dB, '
12932 HeaderString = HeaderString +
'CA-Mag, '
12933 if ShowCB_VdB.get() == 1:
12935 HeaderString = HeaderString +
'CB-dB, '
12937 HeaderString = HeaderString +
'CB-Mag, '
12938 if ShowCA_P.get() == 1:
12939 HeaderString = HeaderString +
'Phase A-B, '
12940 if ShowCB_P.get() == 1:
12941 HeaderString = HeaderString +
'Phase B-A, '
12942 HeaderString = HeaderString +
'\n'
12943 DataFile.write( HeaderString )
12946 while n < len(FSweepAdB):
12947 F = FBins[FStep[n]]
12949 if ShowCA_VdB.get() == 1:
12950 V = 10 * math.log10(float(FSweepAdB[n]))
12953 txt = txt +
"," + str(V)
12954 if ShowCB_VdB.get() == 1:
12955 V = 10 * math.log10(float(FSweepBdB[n]))
12958 txt = txt +
"," + str(V)
12959 if ShowCA_P.get() == 1:
12960 RelPhase = FSweepAPh[n]
12962 RelPhase = RelPhase - 360
12963 elif RelPhase < -180:
12964 RelPhase = RelPhase + 360
12965 txt = txt +
"," + str(RelPhase)
12966 if ShowCB_P.get() == 1:
12967 RelPhase = FSweepBPh[n]
12969 RelPhase = RelPhase - 360
12970 elif RelPhase < -180:
12971 RelPhase = RelPhase + 360
12972 txt = txt +
"," + str(RelPhase)
12974 DataFile.write(txt)
12980 global iawindow, FStep, FBins
12981 global NetworkScreenStatus, NSweepSeriesR, NSweepSeriesX, NSweepSeriesMag, NSweepSeriesAng
12983 if NetworkScreenStatus.get() > 0:
12984 tme = strftime(
"%Y%b%d-%H%M%S", gmtime())
12985 filename =
"Impedance-" + tme
12986 filename = filename +
".csv"
12988 filename = asksaveasfilename(initialfile = filename, defaultextension =
".csv",
12989 filetypes=[(
"Comma Separated Values",
"*.csv")], parent=iawindow)
12990 DataFile = open(filename,
'a')
12991 HeaderString =
'Frequency, Series R, Seriec X, Series Z, Series Angle'
12992 HeaderString = HeaderString +
'\n'
12993 DataFile.write( HeaderString )
12996 while n < len(NSweepSeriesR):
12997 F = FBins[FStep[n]]
12998 txt = str(F) +
"," + str(NSweepSeriesR[n]) +
"," + str(NSweepSeriesX[n]) +
"," + str(NSweepSeriesMag[n]) +
"," + str(NSweepSeriesAng[n])
13000 DataFile.write(txt)
13007 global RUNstatus, PowerStatus, devx, PwrBt, freqwindow, session, AWGSync, contloop, discontloop
13008 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMathSA, DevID, FWRevOne, StopFreqEntry
13009 global Two_X_Sample, ADC_Mux_Mode, ShowAWGASA, ShowAWGBSA
13012 if DevID ==
"No Device":
13013 showwarning(
"WARNING",
"No Device Plugged In!")
13014 elif FWRevOne == 0.0:
13015 showwarning(
"WARNING",
"Out of data Firmware!")
13017 if PowerStatus == 0:
13019 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
13020 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
13022 if (ShowC1_VdB.get() == 0
and
13023 ShowC2_VdB.get() == 0
and
13024 ShowMathSA.get() == 0
and
13025 ShowAWGASA.get() == 0
and
13026 ShowAWGBSA.get() == 0
and
13027 ShowC1_P.get() == 0
and
13028 ShowC2_P.get() == 0):
13029 showwarning(
"WARNING",
"Select at least one trace first", parent=freqwindow)
13032 StopFrequency = float(StopFreqEntry.get())
13034 StopFreqEntry.delete(0,
"end")
13035 StopFreqEntry.insert(0,50000)
13036 StopFrequency = 50000
13037 if FWRevOne > 2.16:
13038 if StopFrequency >= 50000:
13039 Two_X_Sample.set(1)
13041 Two_X_Sample.set(0)
13042 ADC_Mux_Mode.set(0)
13050 global RUNstatus, session, AWGSync
13052 if (RUNstatus.get() == 1):
13054 CHA.mode = Mode.HI_Z_SPLIT
13055 CHB.mode = Mode.HI_Z_SPLIT
13056 if AWGSync.get() == 0:
13060 if session.continuous:
13068 elif (RUNstatus.get() == 2):
13070 elif (RUNstatus.get() == 3):
13072 elif (RUNstatus.get() == 4):
13080 DBlevel.set(DBlevel.get() - 1)
13082 if RUNstatus.get() == 0:
13089 DBlevel.set(DBlevel.get() + 1)
13091 if RUNstatus.get() == 0:
13098 DBlevel.set(DBlevel.get() - 10)
13100 if RUNstatus.get() == 0:
13107 DBlevel.set(DBlevel.get() + 10)
13109 if RUNstatus.get() == 0:
13113 global RUNstatus, SpectrumScreenStatus, IAScreenStatus
13114 global SMPfftpwrTwo, SMPfft, FFTwindow
13115 global TRACEresetFreq, PhAScreenStatus
13117 if FFTwindow.get() != 8:
13118 if (SMPfftpwrTwo.get() > 6):
13119 SMPfftpwrTwo.set(SMPfftpwrTwo.get() - 1)
13120 TRACEresetFreq =
True
13121 SMPfft = 2 ** int(SMPfftpwrTwo.get())
13123 if RUNstatus.get() == 0:
13124 if SpectrumScreenStatus.get() > 0:
13126 if IAScreenStatus.get() > 0:
13128 if PhAScreenStatus.get() > 0:
13130 if RUNstatus.get() == 2:
13134 global RUNstatus, PhAScreenStatus
13135 global SMPfftpwrTwo, SMPfft, FFTwindow
13136 global TRACEresetFreq, SpectrumScreenStatus, IAScreenStatus
13138 if FFTwindow.get() != 8:
13139 if (SMPfftpwrTwo.get() < 16):
13140 SMPfftpwrTwo.set(SMPfftpwrTwo.get() + 1)
13141 TRACEresetFREQ =
True
13142 SMPfft = 2 ** int(SMPfftpwrTwo.get())
13144 if RUNstatus.get() == 0:
13145 if SpectrumScreenStatus.get() > 0:
13147 if IAScreenStatus.get() > 0:
13149 if PhAScreenStatus.get() > 0:
13151 if RUNstatus.get() == 2:
13158 if (DBdivindex.get() >= 1):
13159 DBdivindex.set(DBdivindex.get() - 1)
13161 if RUNstatus.get() == 0:
13169 if (DBdivindex.get() < len(DBdivlist) - 1):
13170 DBdivindex.set(DBdivindex.get() + 1)
13172 if RUNstatus.get() == 0:
13176 global RUNstatus, LoopNum, PowerStatus, devx, PwrBt, bodewindow, session, AWGSync
13177 global ShowCA_VdB, ShowCB_P, ShowCB_VdB, ShowCB_P, ShowMathBP, contloop, discontloop
13178 global FBins, FStep, NSteps, FSweepMode, HScaleBP, CutDC
13179 global AWGAMode, AWGAShape, AWGBMode, AWGBShape
13180 global StartBodeEntry, StopBodeEntry, SweepStepBodeEntry, DevID, FWRevOne
13181 global AWGAFreqEntry, AWGBFreqEntry, Reset_Freq, AWGAIOMode, AWGBIOMode
13182 global Two_X_Sample, ADC_Mux_Mode, AWG_2X, ZEROstuffing, SAMPLErate
13183 global BeginIndex, EndIndex
13185 if DevID ==
"No Device":
13186 showwarning(
"WARNING",
"No Device Plugged In!")
13187 elif FWRevOne == 0.0:
13188 showwarning(
"WARNING",
"Out of data Firmware!")
13190 if PowerStatus == 0:
13192 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
13193 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
13195 if ShowCA_VdB.get() == 0
and ShowCB_VdB.get() == 0
and ShowMathBP.get() == 0:
13196 showwarning(
"WARNING",
"Select at least one trace first", parent=bodewindow)
13199 if ZEROstuffing.get() < 3:
13200 ZEROstuffing.set(3)
13203 EndFreq = float(StopBodeEntry.get())
13205 StopBodeEntry.delete(0,
"end")
13206 StopBodeEntry.insert(0,10000)
13208 if FWRevOne > 2.16:
13209 if EndFreq >= 20000:
13210 Two_X_Sample.set(1)
13211 FBins = numpy.linspace(0, 100000, num=16384)
13213 Two_X_Sample.set(0)
13214 FBins = numpy.linspace(0, 50000, num=16384)
13215 ADC_Mux_Mode.set(0)
13218 BeginFreq = float(StartBodeEntry.get())
13220 StartBodeEntry.delete(0,
"end")
13221 StartBodeEntry.insert(0,100)
13224 if FSweepMode.get() == 1:
13225 if AWGAMode.get() == 2:
13228 if Two_X_Sample.get() == 1:
13235 Reset_Freq = AWGAFreqEntry.get()
13236 if FSweepMode.get() == 2:
13237 if AWGBMode.get() == 2:
13240 if Two_X_Sample.get() == 1:
13247 Reset_Freq = AWGBFreqEntry.get()
13248 if FSweepMode.get() == 3:
13252 NSteps.set(float(SweepStepBodeEntry.get()))
13254 SweepStepBodeEntry.delete(0,
"end")
13255 SweepStepBodeEntry.insert(0, NSteps.get())
13257 if FSweepMode.get() > 0:
13261 NyquistFreq = SAMPLErate/2
13262 BeginIndex = int((BeginFreq/NyquistFreq)*16384)
13263 EndIndex = int((EndFreq/NyquistFreq)*16384)
13264 if NSteps.get() < 5:
13266 if HScaleBP.get() == 1:
13267 LogFStop = math.log10(EndIndex)
13269 LogFStart = math.log10(BeginIndex)
13272 FStep = numpy.logspace(LogFStart, LogFStop, num=NSteps.get(), base=10.0)
13274 FStep = numpy.linspace(BeginIndex, EndIndex, num=NSteps.get())
13279 global RUNstatus, session, AWGSync, FSweepMode, AWGAFreqEntry, AWGBFreqEntry, Reset_Freq
13281 if FSweepMode.get() == 1:
13282 AWGAFreqEntry.delete(0,
"end")
13283 AWGAFreqEntry.insert(0, Reset_Freq)
13284 if FSweepMode.get() == 2:
13285 AWGBFreqEntry.delete(0,
"end")
13286 AWGBFreqEntry.insert(0, Reset_Freq)
13288 if (RUNstatus.get() == 1):
13290 if AWGSync.get() == 0:
13292 elif (RUNstatus.get() == 2):
13294 elif (RUNstatus.get() == 3):
13296 elif (RUNstatus.get() == 4):
13304 DBlevelBP.set(DBlevelBP.get() - 1)
13306 if RUNstatus.get() == 0:
13313 DBlevelBP.set(DBlevelBP.get() + 1)
13315 if RUNstatus.get() == 0:
13322 DBlevelBP.set(DBlevelBP.get() - 10)
13324 if RUNstatus.get() == 0:
13331 DBlevelBP.set(DBlevelBP.get() + 10)
13333 if RUNstatus.get() == 0:
13337 global DBdivindexBP
13340 if (DBdivindexBP.get() >= 1):
13341 DBdivindexBP.set(DBdivindexBP.get() - 1)
13343 if RUNstatus.get() == 0:
13347 global DBdivindexBP
13351 if (DBdivindexBP.get() < len(DBdivlist) - 1):
13352 DBdivindexBP.set(DBdivindexBP.get() + 1)
13354 if RUNstatus.get() == 0:
13358 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P
13365 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P
13372 global FFTBuffA, FFTBuffB
13389 global FFTBuffA, FFTBuffB
13392 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
13407 global FFTBuffA, FFTBuffB, AWGAwaveform, AWGBwaveform
13408 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowAWGASA, ShowAWGBSA
13409 global FFTmemoryA, FFTresultA, FFTresultAB, PhaseAB
13410 global FFTmemoryB, FFTresultB, FFTresultAWGA, FFTresultAWGB
13411 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh
13412 global PhaseA, PhaseB, PhaseMemoryA, PhaseMemoryB
13413 global FFTwindowshape, FFTbandwidth
13414 global AWGSAMPLErate, StartFreqEntry, StopFreqEntry, StartBodeEntry
13415 global SMPfft, LoopNum, IA_Ext_Conf
13416 global STARTsample, STOPsample, CutDC
13417 global TRACEaverage, FreqTraceMode, FSweepMode
13418 global TRACEresetFreq, ZEROstuffing
13419 global SpectrumScreenStatus, IAScreenStatus, BodeScreenStatus
13420 global NetworkScreenStatus, NSweepSeriesR, NSweepSeriesX, NSweepSeriesMag, NSweepSeriesAng
13421 global NSweepParallelR, NSweepParallelC, NSweepParallelL, NSweepSeriesC, NSweepSeriesL
13429 REX = numpy.array(FFTBuffA[0:SMPfft])
13435 REX = REX * FFTwindowshape[0:len(REX)]
13438 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
13439 fftsamples = ZEROstuffingvalue * SMPfft
13442 FFTmemoryA = FFTresultA
13443 if FreqTraceMode.get() == 3:
13444 PhaseMemoryA = PhaseA
13447 ALL = numpy.fft.fft(REX, n=fftsamples)
13448 PhaseA = numpy.angle(ALL, deg=
True)
13449 ALL = numpy.absolute(ALL)
13452 le = int(len(ALL) / 2)
13454 FFTresultA = ALL[0:le]
13455 PhaseA = PhaseA[0:le]
13456 RMScorr = 1.0 / SMPfft
13457 Powcorr = 50*(RMScorr **2)
13458 FFTresultA = FFTresultA * Powcorr
13463 REX = numpy.array(FFTBuffB[0:SMPfft])
13470 REX = REX * FFTwindowshape
13474 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
13475 fftsamples = ZEROstuffingvalue * SMPfft
13478 FFTmemoryB = FFTresultB
13479 if FreqTraceMode.get() == 3:
13480 PhaseMemoryB = PhaseB
13482 ALL = numpy.fft.fft(REX, n=fftsamples)
13483 PhaseB = numpy.angle(ALL, deg=
True)
13484 ALL = numpy.absolute(ALL)
13487 le = int(len(ALL) / 2 )
13489 FFTresultB = ALL[0:le]
13490 PhaseB = PhaseB[0:le]
13491 FFTresultB = FFTresultB * Powcorr
13493 if IA_Ext_Conf.get() == 1:
13498 REX = numpy.array(FFTBuffA[0:SMPfft]-FFTBuffB[0:SMPfft])
13504 REX = REX * FFTwindowshape
13507 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
13508 fftsamples = ZEROstuffingvalue * SMPfft
13515 ALL = numpy.fft.fft(REX, n=fftsamples)
13516 PhaseAB = numpy.angle(ALL, deg=
True)
13517 ALL = numpy.absolute(ALL)
13522 FFTresultAB = ALL[:le]
13523 PhaseAB = PhaseAB[:le]
13524 FFTresultAB = FFTresultAB * Powcorr
13526 if ShowAWGASA.get() > 0:
13527 FFTAWGA = AWGAwaveform
13529 if CutDC.get() == 1:
13530 DCA = numpy.average(FFTAWGA)
13531 FFTAWGA = FFTAWGA - DCA
13532 if len(AWGAwaveform) < SMPfft:
13533 Repeats = math.ceil(SMPfft/len(AWGAwaveform))
13536 FFTAWGA = numpy.concatenate((FFTAWGA, AWGAwaveform-DCA))
13541 REX = numpy.array(FFTAWGA[0:SMPfft])
13548 REX = REX * FFTwindowshape
13552 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
13553 fftsamples = ZEROstuffingvalue * SMPfft
13555 ALL = numpy.fft.fft(REX, n=fftsamples)
13557 ALL = numpy.absolute(ALL)
13560 le = int(len(ALL) / 2 )
13562 FFTresultAWGA = ALL[0:le]
13564 FFTresultAWGA = FFTresultAWGA * Powcorr
13566 if ShowAWGBSA.get() > 0:
13567 FFTAWGB = AWGBwaveform
13569 if CutDC.get() == 1:
13570 DCB = numpy.average(FFTAWGB)
13571 FFTAWGB = FFTAWGB - DCB
13572 if len(AWGBwaveform) < SMPfft:
13573 Repeats = math.ceil(SMPfft/len(AWGBwaveform))
13576 FFTAWGB = numpy.concatenate((FFTAWGB, AWGBwaveform-DCB))
13581 REX = numpy.array(FFTAWGB[0:SMPfft])
13588 REX = REX * FFTwindowshape
13592 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
13593 fftsamples = ZEROstuffingvalue * SMPfft
13595 ALL = numpy.fft.fft(REX, n=fftsamples)
13597 ALL = numpy.absolute(ALL)
13600 le = int(len(ALL) / 2 )
13602 FFTresultAWGB = ALL[0:le]
13604 FFTresultAWGB = FFTresultAWGB * Powcorr
13606 TRACEsize = int(len(FFTresultB))
13607 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
13608 if SpectrumScreenStatus.get() > 0:
13610 StartFrequency = float(StartFreqEntry.get())
13612 StartFreqEntry.delete(0,
"end")
13613 StartFreqEntry.insert(0,100)
13614 StartFrequency = 100
13615 STARTsample = int(StartFrequency / Fsample)
13618 if LoopNum.get() == 1:
13619 PhaseMemoryB = PhaseB
13624 if NetworkScreenStatus.get() > 0:
13627 NSweepSeriesMag = []
13628 NSweepSeriesAng = []
13629 NSweepParallelR = []
13630 NSweepParallelC = []
13631 NSweepParallelL = []
13634 if FreqTraceMode.get() == 1:
13635 if FSweepMode.get() == 1:
13636 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
13637 if ptmax > STARTsample:
13638 STARTsample = ptmax
13641 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
13643 if FSweepMode.get() == 2:
13644 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
13645 if ptmax > STARTsample:
13646 STARTsample = ptmax
13649 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
13652 if FreqTraceMode.get() == 2
and TRACEresetFreq ==
False:
13653 if FSweepMode.get() == 1:
13654 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
13655 if ptmax > STARTsample:
13656 STARTsample = ptmax
13659 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
13661 if FSweepMode.get() == 2:
13662 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
13663 if ptmax > STARTsample:
13664 STARTsample = ptmax
13667 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
13669 if len(FFTresultB) == len(FFTmemoryB):
13670 FFTresultB = numpy.maximum(FFTresultB, FFTmemoryB)
13671 if FreqTraceMode.get() == 3
and TRACEresetFreq ==
False:
13673 FFTresultB = FFTmemoryB + (FFTresultB - FFTmemoryB) / TRACEaverage.get()
13674 PhaseB = PhaseMemoryB +(PhaseB - PhaseMemoryB) / TRACEaverage.get()
13676 FFTmemoryB = FFTresultB
13677 PhaseMemoryB = PhaseB
13679 TRACEsize = int(len(FFTresultA))
13680 Fsample = float(AWGSAMPLErate / 2) / (TRACEsize - 1)
13681 if SpectrumScreenStatus.get() > 0:
13682 STARTsample = int(StartFrequency / Fsample)
13685 if LoopNum.get() == 1:
13686 PhaseMemoryA = PhaseA
13687 if FreqTraceMode.get() == 1:
13688 if FSweepMode.get() == 1:
13689 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
13690 if ptmax > STARTsample:
13691 STARTsample = ptmax
13694 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
13696 if FSweepMode.get() == 2:
13697 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
13698 if ptmax > STARTsample:
13699 STARTsample = ptmax
13702 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
13705 if FreqTraceMode.get() == 2
and TRACEresetFreq ==
False:
13706 if FSweepMode.get() == 1:
13707 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
13708 if ptmax > STARTsample:
13709 STARTsample = ptmax
13712 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
13714 if FSweepMode.get() == 2:
13715 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
13716 if ptmax > STARTsample:
13717 STARTsample = ptmax
13720 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
13723 if len(FFTresultA) == len(FFTmemoryA):
13724 FFTresultA = numpy.maximum(FFTresultA, FFTmemoryA)
13725 if FreqTraceMode.get() == 3
and TRACEresetFreq ==
False:
13727 FFTresultA = FFTmemoryA + (FFTresultA - FFTmemoryA) / TRACEaverage.get()
13728 PhaseA = PhaseMemoryA +(PhaseA - PhaseMemoryA) / TRACEaverage.get()
13730 FFTmemoryA = FFTresultA
13731 PhaseMemoryA = PhaseA
13733 if FSweepMode.get() > 0
and BodeScreenStatus.get() > 0:
13734 FSweepAdB.append(numpy.amax(FFTresultA))
13735 FSweepBdB.append(numpy.amax(FFTresultB))
13736 FSweepAPh.append(PhaseA[numpy.argmax(FFTresultA)])
13737 FSweepBPh.append(PhaseB[numpy.argmax(FFTresultB)])
13739 TRACEresetFreq =
False
13742 global FFTmemoryA, FFTresultA
13743 global FFTmemoryB, FFTresultB
13744 global FFTresultAWGA, FFTresultAWGB, ShowAWGASA, ShowAWGBSA
13745 global PhaseA, PhaseB, PhaseMemoryA, PhaseMemoryB
13746 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh, FStep
13747 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMathSA
13748 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
13749 global PeakxM, PeakyM, PeakMdb, PeakfreqM, PeakIndexA, PeakIndexB
13750 global PeakfreqA, PeakfreqB, Two_X_Sample
13755 global AWGSAMPLErate, HScale, Fsample, SAMPLErate, BaseSampleRate
13756 global StartFreqEntry, StopFreqEntry, PhCenFreqEntry, RelPhaseCenter
13757 global STARTsample, STOPsample, LoopNum, FSweepMode, FreqTraceMode, SMPfft
13758 global SAVScale, SAVPSD, SAvertmaxEntry, SAvertminEntry, SAvertmax, SAvertmin
13759 global T1Fline, T2Fline, TFMline, T1Pline, T2Pline, TAFline, TBFline
13766 StartFrequency = float(StartFreqEntry.get())
13768 StartFreqEntry.delete(0,
"end")
13769 StartFreqEntry.insert(0,100)
13770 StartFrequency = 100
13772 StopFrequency = float(StopFreqEntry.get())
13774 StopFreqEntry.delete(0,
"end")
13775 StopFreqEntry.insert(0,50000)
13776 StopFrequency = 50000
13777 if StartFrequency > StopFrequency :
13778 StopFreqEntry.delete(0,
"end")
13779 StopFreqEntry.insert(0,50000)
13780 StopFrequency = 50000
13781 if StopFrequency < StartFrequency :
13782 StopFreqEntry.delete(0,
"end")
13783 StopFreqEntry.insert(0,50000)
13784 StopFrequency = 50000
13786 Phasecenter = int(PhCenFreqEntry.get())
13787 RelPhaseCenter.set(Phasecenter)
13789 PhCenFreqEntry.delete(0,
"end")
13790 PhCenFreqEntry.insert(0,0)
13791 RelPhaseCenter.set(0)
13794 if SAvertmaxEntry.get() ==
"10.0":
13796 elif SAvertmaxEntry.get() ==
"1.0":
13798 elif SAvertmaxEntry.get() ==
"0.1":
13800 elif SAvertmaxEntry.get() ==
"10mV":
13802 elif SAvertmaxEntry.get() ==
"1mV":
13804 elif SAvertmaxEntry.get() ==
"100uV":
13806 elif SAvertmaxEntry.get() ==
"10uV":
13808 elif SAvertmaxEntry.get() ==
"1uV":
13810 elif SAvertmaxEntry.get() ==
"100nV":
13812 elif SAvertmaxEntry.get() ==
"10nV":
13815 SAvertmax = float(SAvertmaxEntry.get())
13816 if SAvertmax < 0.0:
13817 SAvertmaxEntry.delete(0,
"end")
13818 SAvertmaxEntry.insert(0,
"1mV")
13821 SAvertmaxEntry.delete(0,
"end")
13822 SAvertmaxEntry.insert(0,
"1mV")
13825 if SAvertminEntry.get() ==
"10.0":
13827 elif SAvertminEntry.get() ==
"1.0":
13829 elif SAvertminEntry.get() ==
"0.1":
13831 elif SAvertminEntry.get() ==
"10mV":
13833 elif SAvertminEntry.get() ==
"1mV":
13835 elif SAvertminEntry.get() ==
"100uV":
13837 elif SAvertminEntry.get() ==
"10uV":
13839 elif SAvertminEntry.get() ==
"1uV":
13841 elif SAvertminEntry.get() ==
"100nV":
13843 elif SAvertminEntry.get() ==
"10nV":
13846 SAvertmin = float(SAvertminEntry.get())
13847 if SAvertmin < 0.0:
13848 SAvertminEntry.delete(0,
"end")
13849 SAvertminEntry.insert(0,
"1uV")
13852 SAvertminEntry.delete(0,
"end")
13853 SAvertminEntry.insert(0,
"1uV")
13855 if ShowC1_VdB.get() == 1
or ShowMathSA.get() > 0:
13856 TRACEsize = len(FFTresultA)
13857 elif ShowC2_VdB.get() == 1
or ShowMathSA.get() > 0:
13858 TRACEsize = len(FFTresultB)
13859 elif ShowAWGASA.get() > 0:
13860 TRACEsize = len(FFTresultAWGA)
13861 elif ShowAWGBSA.get() > 0:
13862 TRACEsize = len(FFTresultAWGB)
13866 if FSweepMode.get() > 0
and LoopNum.get() == NSteps.get():
13867 PhaseA = PhaseMemoryA
13868 PhaseB = PhaseMemoryB
13869 FBinWidth = float(SAMPLErate / 2.0) / (TRACEsize - 1)
13871 Yconv = float(GRHF) / (Vdiv.get() * DBdivlist[DBdivindex.get()])
13872 YVconv = float(GRHF) / (SAvertmax - SAvertmin)
13873 Yc = float(Y0TF) + Yconv * (DBlevel.get())
13874 YVc = float(Y0TF) + YVconv * SAvertmax
13877 Yphconv = float(GRHF) / 360
13878 Yp = float(Y0TF) + Yphconv + 180
13880 Fpixel = (StopFrequency - StartFrequency) / GRWF
13881 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
13882 LogFStop = math.log10(StopFrequency)
13884 LogFStart = math.log10(StartFrequency)
13887 LogFpixel = (LogFStop - LogFStart) / GRWF
13890 LogVStop = math.log10(SAvertmax)
13894 LogVStart = math.log10(SAvertmin)
13897 LogVpixel = (LogVStop - LogVStart) / GRHF
13899 STARTsample = StartFrequency / Fsample
13900 STARTsample = int(math.ceil(STARTsample))
13902 STOPsample = StopFrequency / Fsample
13903 STOPsample = int(math.floor(STOPsample))
13905 MAXsample = TRACEsize
13906 if STARTsample > (MAXsample - 1):
13907 STARTsample = MAXsample - 1
13909 if STOPsample > MAXsample:
13910 STOPsample = MAXsample
13920 PeakIndexA = PeakIndexB = n
13921 PeakdbA = PeakdbB = PeakMdb = -200
13922 while n <= STOPsample:
13924 if HScale.get() == 1:
13926 LogF = math.log10(F)
13927 x = X0LF + (LogF - LogFStart)/LogFpixel
13931 x = X0LF + (F - StartFrequency) / Fpixel
13932 if ShowC1_VdB.get() == 1:
13933 T1Fline.append(int(x + 0.5))
13935 if SAVScale.get() == 0:
13936 if SAVPSD.get() == 1:
13937 dbA = 10 * math.log10(float(FFTresultA[n])/math.sqrt(FBinWidth))
13939 dbA = 10 * math.log10(float(FFTresultA[n]))
13940 ya = Yc - Yconv * dbA
13942 dbA = 10 * math.log10(float(FFTresultA[n]))
13943 V = 10.0**(dbA/20.0)
13944 if SAVPSD.get() == 1:
13945 V = V/math.sqrt(FBinWidth)
13946 if SAVScale.get() == 2:
13948 LogV = math.log10(V)
13949 ya = YVc - (LogV - LogVStart)/LogVpixel
13951 ya = YVc - YVconv * V
13953 ya = YVc - YVconv * V
13962 PeakyA = int(ya + 0.5)
13963 PeakxA = int(x + 0.5)
13966 T1Fline.append(int(ya + 0.5))
13967 if ShowC2_VdB.get() == 1:
13968 T2Fline.append(int(x + 0.5))
13970 if SAVScale.get() == 0:
13971 if SAVPSD.get() == 1:
13972 dbB = 10 * math.log10(float(FFTresultB[n])/math.sqrt(FBinWidth))
13974 dbB = 10 * math.log10(float(FFTresultB[n]))
13975 yb = Yc - Yconv * dbB
13977 dbB = 10 * math.log10(float(FFTresultB[n]))
13978 V = 10.0**(dbB/20.0)
13979 if SAVPSD.get() == 1:
13980 V = V/math.sqrt(FBinWidth)
13981 if SAVScale.get() == 2:
13983 LogV = math.log10(V)
13984 yb = YVc - (LogV - LogVStart)/LogVpixel
13986 yb = YVc - YVconv * V
13988 yb = YVc - YVconv * V
13997 PeakyB = int(yb + 0.5)
13998 PeakxB = int(x + 0.5)
14001 T2Fline.append(int(yb + 0.5))
14002 if ShowAWGASA.get() > 0:
14003 TAFline.append(int(x + 0.5))
14005 if SAVPSD.get() == 1:
14006 dbA = 10 * math.log10(float(FFTresultAWGA[n])/math.sqrt(FBinWidth))
14008 dbA = 10 * math.log10(float(FFTresultAWGA[n]))
14009 ya = Yc - Yconv * dbA
14016 TAFline.append(int(ya + 0.5))
14017 if ShowAWGBSA.get() > 0:
14018 TBFline.append(int(x + 0.5))
14020 if SAVPSD.get() == 1:
14021 dbA = 10 * math.log10(float(FFTresultAWGB[n])/math.sqrt(FBinWidth))
14023 dbA = 10 * math.log10(float(FFTresultAWGb[n]))
14024 ya = Yc - Yconv * dbA
14031 TBFline.append(int(ya + 0.5))
14032 if ShowC1_P.get() == 1:
14033 T1Pline.append(int(x + 0.5))
14034 if FSweepMode.get() > 0:
14035 RelPhase = PhaseMemoryA[n]-PhaseMemoryB[n]
14037 RelPhase = PhaseA[n]-PhaseB[n]
14038 RelPhase = RelPhase - Phasecenter
14040 RelPhase = RelPhase - 360
14041 elif RelPhase < -180:
14042 RelPhase = RelPhase + 360
14043 if Two_X_Sample.get() == 0:
14044 PhErr = 0.0018 * n * Fsample
14045 RelPhase = RelPhase + PhErr - 12.0
14047 RelPhase = RelPhase - 9.0
14048 ya = Yp - Yphconv * RelPhase
14049 T1Pline.append(int(ya + 0.5))
14050 if ShowC2_P.get() == 1:
14051 T2Pline.append(int(x + 0.5))
14052 if FSweepMode.get() > 0:
14053 RelPhase = PhaseMemoryB[n]-PhaseMemoryA[n]
14055 RelPhase = PhaseB[n]-PhaseA[n]
14056 RelPhase = RelPhase - Phasecenter
14058 RelPhase = RelPhase - 360
14059 elif RelPhase < -180:
14060 RelPhase = RelPhase + 360
14061 if Two_X_Sample.get() == 0:
14062 PhErr = 0.0018 * n * Fsample
14063 RelPhase = RelPhase - PhErr - 12.0
14065 RelPhase = RelPhase - 9.0
14066 ya = Yp - Yphconv * RelPhase
14067 T2Pline.append(int(ya + 0.5))
14068 if ShowMathSA.get() > 0:
14069 TFMline.append(int(x + 0.5))
14070 if SAVPSD.get() == 1:
14071 dbA = 10 * math.log10(float(FFTresultA[n])/math.sqrt(FBinWidth))
14072 dbB = 10 * math.log10(float(FFTresultB[n])/math.sqrt(FBinWidth))
14074 dbA = 10 * math.log10(float(FFTresultA[n]))
14075 dbB = 10 * math.log10(float(FFTresultB[n]))
14076 if ShowMathSA.get() == 1:
14078 elif ShowMathSA.get() == 2:
14080 yb = Yc - Yconv * MdB
14087 PeakyM = int(yb + 0.5)
14088 PeakxM = int(x + 0.5)
14090 TFMline.append(int(yb + 0.5))
14095 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh, FStep, FBins
14096 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMathBP
14097 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
14098 global PeakxM, PeakyM, PeakMdb, PeakfreqM
14099 global PeakfreqA, PeakfreqB, Two_X_Sample, PhaseOffset1x, PhaseOffset2x
14100 global DBdivindexBP
14105 global AWGSAMPLErate, HScaleBP, RUNstatus, SAMPLErate, BaseSampleRate
14106 global StartBodeEntry, StopBodeEntry, SMPfft
14107 global STARTsample, STOPsample, LoopNum, FSweepMode
14108 global FreqTraceMode, RelPhaseCenter, PhCenBodeEntry, ImCenBodeEntry, ImpedanceCenter, Impedcenter
14109 global TAFline, TBFline, TBPMline, TAPline, TBPline
14113 global ResScale, NetworkScreenStatus, Show_Rseries, NSweepSeriesR, Show_Xseries, NSweepSeriesX
14114 global Show_Magnitude, NSweepSeriesMag, Show_Angle, NSweepSeriesAng
14115 global TIARline, TIAXline, TIAMagline, TIAAngline, CurrentFreqX
14119 if ShowCA_VdB.get() == 1
or ShowMathBP.get() > 0:
14120 TRACEsize = len(FStep)
14121 elif ShowCB_VdB.get() == 1
or ShowMathBP.get() > 0:
14122 TRACEsize = len(FStep)
14127 EndFreq = float(StopBodeEntry.get())
14129 StopBodeEntry.delete(0,
"end")
14130 StopBodeEntry.insert(0,10000)
14133 BeginFreq = float(StartBodeEntry.get())
14135 StartBodeEntry.delete(0,
"end")
14136 StartBodeEntry.insert(0,100)
14139 Phasecenter = int(PhCenBodeEntry.get())
14140 RelPhaseCenter.set(Phasecenter)
14142 PhCenBodeEntry.delete(0,
"end")
14143 PhCenBodeEntry.insert(0,0)
14144 RelPhaseCenter.set(0)
14147 Impedcenter = int(ImCenBodeEntry.get())
14148 ImpedanceCenter.set(Impedcenter)
14150 ImCenBodeEntry.delete(0,
"end")
14151 ImCenBodeEntry.insert(0,0)
14152 ImpedanceCenter.set(0)
14155 HalfSAMPLErate = SAMPLErate/2
14156 BeginIndex = int((BeginFreq/HalfSAMPLErate)*16384)
14157 EndIndex = int((EndFreq/HalfSAMPLErate)*16384)
14158 CurrentFreqX = X0LBP + 14
14159 if FSweepMode.get() > 0
and len(FSweepAdB) > 4:
14161 Yconv = float(GRHBP) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
14162 Yc = float(Y0TBP) + Yconv * (DBlevelBP.get())
14164 Ymax = Y0TBP + GRHBP
14165 Yphconv = float(GRHBP) / 360
14166 Yp = float(Y0TBP) + Yphconv + 180
14169 Fpixel = (EndFreq - BeginFreq) / GRWBP
14170 LogFStop = math.log10(EndFreq)
14172 LogFStart = math.log10(BeginFreq)
14175 LogFpixel = (LogFStop - LogFStart) / GRWBP
14189 for n
in range(len(FSweepAdB)):
14191 F = FBins[int(FStep[n])]
14193 F = FBins[int(FStep[0])]
14194 if F >= BeginFreq
and F <= EndFreq:
14195 if HScaleBP.get() == 1:
14197 LogF = math.log10(F)
14198 x = x1 + (LogF - LogFStart)/LogFpixel
14202 x = x1 + (F - BeginFreq) / Fpixel
14204 if ShowCA_VdB.get() == 1:
14205 TAFline.append(int(x + 0.5))
14207 dbA = 10 * math.log10(float(FSweepAdB[n]))
14208 ya = Yc - Yconv * dbA
14217 PeakyA = int(ya + 0.5)
14218 PeakxA = int(x + 0.5)
14220 TAFline.append(int(ya + 0.5))
14221 if ShowCB_VdB.get() == 1:
14222 TBFline.append(int(x + 0.5))
14224 dbB = 10 * math.log10(float(FSweepBdB[n]))
14225 yb = Yc - Yconv * dbB
14234 PeakyB = int(yb + 0.5)
14235 PeakxB = int(x + 0.5)
14237 TBFline.append(int(yb + 0.5))
14238 if ShowCA_P.get() == 1:
14239 TAPline.append(int(x + 0.5))
14240 RelPhase = FSweepAPh[n] - FSweepBPh[n]
14241 RelPhase = RelPhase - Phasecenter
14243 RelPhase = RelPhase - 360
14244 elif RelPhase < -180:
14245 RelPhase = RelPhase + 360
14246 if Two_X_Sample.get() == 0:
14248 RelPhase = RelPhase + PhErr - PhaseOffset1x
14250 RelPhase = RelPhase - PhaseOffset2x
14251 ya = Yp - Yphconv * RelPhase
14252 TAPline.append(int(ya + 0.5))
14253 if ShowCB_P.get() == 1:
14254 TBPline.append(int(x + 0.5))
14255 RelPhase = FSweepBPh[n] - FSweepAPh[n]
14256 RelPhase = RelPhase - Phasecenter
14258 RelPhase = RelPhase - 360
14259 elif RelPhase < -180:
14260 RelPhase = RelPhase + 360
14261 if Two_X_Sample.get() == 0:
14263 RelPhase = RelPhase - PhErr - PhaseOffset1x
14265 RelPhase = RelPhase - PhaseOffset2x
14266 ya = Yp - Yphconv * RelPhase
14267 TBPline.append(int(ya + 0.5))
14268 if ShowMathBP.get() > 0:
14269 TBPMline.append(int(x + 0.5))
14270 dbA = 10 * math.log10(float(FSweepAdB[n]))
14271 dbB = 10 * math.log10(float(FSweepBdB[n]))
14272 if ShowMathBP.get() == 1:
14274 elif ShowMathBP.get() == 2:
14276 yb = Yc - Yconv * MdB
14283 PeakyM = int(yb + 0.5)
14284 PeakxM = int(x + 0.5)
14286 TBPMline.append(int(yb + 0.5))
14288 if NetworkScreenStatus.get() > 0:
14289 ycenter = Y0TBP + (GRHBP/2)
14290 OhmsperPixel = float(ResScale.get())*Vdiv.get()/GRHBP
14292 for n
in range(len(NSweepSeriesR)):
14294 F = FBins[int(FStep[n])]
14296 F = FBins[int(FStep[0])]
14297 if F >= BeginFreq
and F <= EndFreq:
14298 if HScaleBP.get() == 1:
14300 LogF = math.log10(F)
14301 x = x1 + (LogF - LogFStart)/LogFpixel
14305 x = x1 + (F - BeginFreq) / Fpixel
14306 if Show_Rseries.get() == 1:
14307 TIARline.append(int(x + 0.5))
14308 y1 = ycenter - ((NSweepSeriesR[n]-Impedcenter) / OhmsperPixel)
14313 TIARline.append(y1)
14314 if Show_Xseries.get() == 1:
14315 TIAXline.append(int(x + 0.5))
14316 y1 = ycenter - ((NSweepSeriesX[n]-Impedcenter) / OhmsperPixel)
14321 TIAXline.append(y1)
14322 if Show_Magnitude.get() == 1:
14323 TIAMagline.append(int(x + 0.5))
14324 y1 = ycenter - ((NSweepSeriesMag[n]-Impedcenter) / OhmsperPixel)
14329 TIAMagline.append(y1)
14330 if Show_Angle.get() == 1:
14331 TIAAngline.append(int(x + 0.5))
14332 y1 = ycenter - Yphconv * (NSweepSeriesAng[n]-Phasecenter)
14337 TIAAngline.append(y1)
14340 global CANVASheightBP, CANVASwidthBP, SmoothCurvesBP
14341 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
14342 global PeakxM, PeakyM, PeakMdb, PeakfreqM
14343 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
14344 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
14345 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
14347 global COLORsignalband, COLORtext
14348 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5, COLORtrace6, COLORtrace7
14349 global FSweepMode, LoopNum, MarkerFreqNum, TRACEwidth, GridWidth
14350 global DBdivindexBP
14353 global FFTwindow, FFTbandwidth, ZEROstuffing, FFTwindowname
14360 global AWGSAMPLErate, HScaleBP, SAMPLErate, BaseSampleRate
14362 global StartBodeEntry, StopBodeEntry
14363 global ShowCA_P, ShowCB_P, ShowRA_VdB, ShowRB_VdB, ShowMarkerBP
14364 global ShowCA_RdB, ShowCA_RP, ShowCB_RdB, ShowCB_RP
14365 global ShowMathBP, BodeDisp, RelPhaseCenter, PhCenBodeEntry, ImCenBodeEntry, ImpedanceCenter, Impedcenter
14366 global ShowBPCur, ShowBdBCur, BPCursor, BdBCursor
14367 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle, NetworkScreenStatus
14368 global Show_RseriesRef, Show_XseriesRef, Show_MagnitudeRef, Show_AngleRef
14369 global TAFline, TBFline, TAPline, TAFRline, TBFRline, TBPMline, TBPRMline
14370 global TAPRline, TBPRline
14371 global TRACEaverage
14372 global FreqTraceMode
14373 global Vdiv, ResScale
14374 global TIARline, TIAXline, TIAMagline, TIAAngline, CurrentFreqX
14375 global RefIARline, RefIAXline, RefIAMagline, RefIAAngline
14382 EndFreq = float(StopBodeEntry.get())
14384 StopBodeEntry.delete(0,
"end")
14385 StopBodeEntry.insert(0,10000)
14388 BeginFreq = float(StartBodeEntry.get())
14390 StartBodeEntry.delete(0,
"end")
14391 StartBodeEntry.insert(0,100)
14394 Phasecenter = int(PhCenBodeEntry.get())
14395 RelPhaseCenter.set(Phasecenter)
14397 PhCenBodeEntry.delete(0,
"end")
14398 PhCenBodeEntry.insert(0,0)
14399 RelPhaseCenter.set(0)
14402 Impedcenter = int(ImCenBodeEntry.get())
14403 ImpedanceCenter.set(Impedcenter)
14405 ImCenBodeEntry.delete(0,
"end")
14406 ImCenBodeEntry.insert(0,0)
14407 ImpedanceCenter.set(0)
14414 while (i <= Vdiv.get()):
14415 y = Y0TBP + i * GRHBP/Vdiv.get()
14416 Dline = [x1,y,x2,y]
14417 if i == 0
or i == Vdiv.get():
14418 Bodeca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
14420 Bodeca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
14421 Vaxis_value = (DBlevelBP.get() - (i * DBdivlist[DBdivindexBP.get()]))
14422 Vaxis_label = str(Vaxis_value)
14423 Bodeca.create_text(x1-3, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
14424 if ShowCA_P.get() == 1
or ShowCB_P.get() == 1
or Show_Angle.get() == 1:
14425 Vaxis_value = ( 180 - ( i * (360 / Vdiv.get()))) + Phasecenter
14426 Vaxis_label = str(Vaxis_value)
14427 Bodeca.create_text(x2+3, y, text=Vaxis_label, fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize ))
14428 if NetworkScreenStatus.get() > 0:
14429 if Show_Rseries.get() == 1
or Show_Xseries.get() == 1
or Show_Magnitude.get() == 1:
14430 RperDiv = float(ResScale.get())
14431 Vaxis_value = ( (RperDiv * Vdiv.get()/2) - (i * RperDiv) ) + Impedcenter
14432 if Vaxis_value > 500
or Vaxis_value < -500:
14433 Vaxis_value = Vaxis_value/1000.0
14434 if Vaxis_value > 5
or Vaxis_value < -5:
14435 Vaxis_label =
' {0:.0f}'.format(Vaxis_value) +
'K'
14437 Vaxis_label =
' {0:.1f}'.format(Vaxis_value) +
'K'
14439 Vaxis_label =
' {0:.0f} '.format(Vaxis_value)
14440 Bodeca.create_text(x1-23, y, text=Vaxis_label, fill=COLORtrace5, anchor=
"e", font=(
"arial", FontSize ))
14446 if HScaleBP.get() == 1:
14448 LogFStop = math.log10(EndFreq)
14450 LogFStart = math.log10(BeginFreq)
14453 LogFpixel = (LogFStop - LogFStart) / GRWBP
14455 while F <= EndFreq:
14458 LogF = math.log10(F)
14459 x = x1 + (LogF - LogFStart)/LogFpixel
14462 Dline = [x,y1,x,y2]
14463 if F == 1
or F == 10
or F == 100
or F == 1000
or F == 10000
or F == 100000:
14464 Bodeca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
14465 axis_label = str(F)
14466 Bodeca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
14468 Bodeca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
14485 Freqdiv = (EndFreq - BeginFreq) / 10
14487 x = x1 + i * GRWBP/10
14488 Dline = [x,y1,x,y2]
14489 if i == 0
or i == 10:
14490 Bodeca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
14492 Bodeca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
14493 axis_value = BeginFreq + (i * Freqdiv)
14494 axis_label = str(axis_value)
14495 Bodeca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
14498 Fpixel = (EndFreq - BeginFreq) / GRWBP
14499 LogFStop = math.log10(EndFreq)
14501 LogFStart = math.log10(BeginFreq)
14504 LogFpixel = (LogFStop - LogFStart) / GRWBP
14505 if ShowBPCur.get() > 0:
14506 Dline = [BPCursor, Y0TBP, BPCursor, Y0TBP+GRHBP]
14507 Bodeca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
14509 if HScaleBP.get() == 1:
14510 xfreq = 10**(((BPCursor-x1)*LogFpixel) + LogFStart)
14512 xfreq = ((BPCursor-x1)*Fpixel)+BeginFreq
14513 XFString =
' {0:.2f} '.format(xfreq)
14514 V_label = XFString +
" Hz"
14515 Bodeca.create_text(BPCursor, Y0TBP+GRHBP+6, text=V_label, fill=COLORtext, anchor=
"n", font=(
"arial", FontSize ))
14518 if ShowBdBCur.get() > 0:
14519 Dline = [x1, BdBCursor, x1+GRWBP, BdBCursor]
14520 Bodeca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
14521 if ShowBdBCur.get() == 1:
14523 Yconv = float(GRHBP) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
14524 Yc = float(Y0TBP) + Yconv * (DBlevelBP.get())
14525 yvdB = ((Yc-BdBCursor)/Yconv)
14526 VdBString =
' {0:.1f} '.format(yvdB)
14527 V_label = VdBString +
" dBV"
14530 Yconv = float(GRHBP) / 360.0
14532 yvdB = 180 + ((Yc-BdBCursor)/Yconv) + Phasecenter
14533 VdBString =
' {0:.1f} '.format(yvdB)
14534 V_label = VdBString +
" Deg"
14535 Bodeca.create_text(x1+GRWBP+1, BdBCursor, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
14538 SmoothBool = SmoothCurvesBP.get()
14540 if len(TAFline) > 4:
14542 if OverRangeFlagA == 1:
14543 Bodeca.create_line(TAFline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14545 Bodeca.create_line(TAFline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14546 if ShowMarkerBP.get() == 1:
14547 Peak_label =
' {0:.2f} '.format(PeakdbA) +
',' +
' {0:.1f} '.format(PeakfreqA)
14548 Bodeca.create_text(PeakxA, PeakyA, text=Peak_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
14549 if len(TBFline) > 4:
14551 if OverRangeFlagB == 1:
14552 Bodeca.create_line(TBFline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14554 Bodeca.create_line(TBFline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14555 if ShowMarkerBP.get() == 1:
14556 Peak_label =
' {0:.2f} '.format(PeakdbB) +
',' +
' {0:.1f} '.format(PeakfreqB)
14557 Bodeca.create_text(PeakxB, PeakyB, text=Peak_label, fill=COLORtrace2, anchor=
"w", font=(
"arial", FontSize ))
14558 if len(TAPline) > 4:
14560 Bodeca.create_line(TAPline, fill=COLORtrace3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14561 if len(TBPline) > 4:
14563 Bodeca.create_line(TBPline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14564 if ShowCA_RdB.get() == 1
and len(TAFRline) > 4:
14565 Bodeca.create_line(TAFRline, fill=COLORtraceR1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14566 if ShowMarkerBP.get() == 1:
14567 Peak_label =
' {0:.2f} '.format(PeakdbRA) +
',' +
' {0:.1f} '.format(PeakfreqRA)
14568 Bodeca.create_text(PeakxRA, PeakyRA, text=Peak_label, fill=COLORtraceR1, anchor=
"e", font=(
"arial", FontSize ))
14569 if ShowCB_RdB.get() == 1
and len(TBFRline) > 4:
14570 Bodeca.create_line(TBFRline, fill=COLORtraceR2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14571 if ShowMarkerBP.get() == 1:
14572 Peak_label =
' {0:.2f} '.format(PeakdbRB) +
',' +
' {0:.1f} '.format(PeakfreqRB)
14573 Freqca.create_text(PeakxRB, PeakyRB, text=Peak_label, fill=COLORtraceR2, anchor=
"w", font=(
"arial", FontSize ))
14574 if ShowCA_RP.get() == 1
and len(TAPRline) > 4:
14575 Bodeca.create_line(TAPRline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14576 if ShowCB_RP.get() == 1
and len(TBPRline) > 4:
14577 Bodeca.create_line(TBPRline, fill=COLORtraceR4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14578 if ShowMathBP.get() > 0
and len(TBPMline) > 4:
14579 Bodeca.create_line(TBPMline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14580 if ShowMarkerBP.get() == 1:
14581 Peak_label =
' {0:.2f} '.format(PeakMdb) +
',' +
' {0:.1f} '.format(PeakfreqM)
14582 Bodeca.create_text(PeakxM, PeakyM, text=Peak_label, fill=COLORtrace5, anchor=
"w", font=(
"arial", FontSize ))
14583 if ShowRMathBP.get() == 1
and len(TBPRMline) > 4:
14584 Bodeca.create_line(TBPRMline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14585 if ShowMarkerBP.get() == 1:
14586 Peak_label =
' {0:.2f} '.format(PeakRMdb) +
',' +
' {0:.1f} '.format(PeakfreqRM)
14587 Bodeca.create_text(PeakxRM, PeakyRM, text=Peak_label, fill=COLORtraceR5, anchor=
"w", font=(
"arial", FontSize ))
14588 if Show_Rseries.get() == 1
and len(TIARline) > 4:
14589 Bodeca.create_line(TIARline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14590 if Show_Xseries.get() == 1
and len(TIAXline) > 4:
14591 Bodeca.create_line(TIAXline, fill=COLORtrace6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14592 if Show_Magnitude.get() == 1
and len(TIAMagline) > 4:
14593 Bodeca.create_line(TIAMagline, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14594 if Show_Angle.get() == 1
and len(TIAAngline) > 4:
14595 Bodeca.create_line(TIAAngline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14596 if Show_RseriesRef.get() == 1
and len(RefIARline) > 4:
14597 Bodeca.create_line(RefIARline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14598 if Show_XseriesRef.get() == 1
and len(RefIAXline) > 4:
14599 Bodeca.create_line(RefIAXline, fill=COLORtraceR6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14600 if Show_MagnitudeRef.get() == 1
and len(RefIAMagline) > 4:
14601 Bodeca.create_line(RefIAMagline, fill=COLORtraceR7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14602 if Show_AngleRef.get() == 1
and len(RefIAAngline) > 4:
14603 Bodeca.create_line(RefIAAngline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14605 Dline = [CurrentFreqX, Y0TBP, CurrentFreqX, Y0TBP+GRHBP]
14606 Bodeca.create_line(Dline, dash=(2,2), fill=COLORgrid, width=GridWidth.get())
14607 if HScaleBP.get() == 1:
14608 xfreq = 10**(((CurrentFreqX-x1)*LogFpixel) + LogFStart)
14610 xfreq = ((CurrentFreqX-x1)*Fpixel)+BeginFreq
14611 XFString =
' {0:.0f} '.format(xfreq)
14612 V_label = XFString +
" Hz"
14613 Bodeca.create_text(CurrentFreqX, Y0TBP+GRHBP+1, text=V_label, fill=COLORtext, anchor=
"n", font=(
"arial", FontSize ))
14616 txt =
" Sample rate: " + str(SAMPLErate)
14617 txt = txt +
" FFT samples: " + str(SMPfft)
14619 txt = txt +
" " + FFTwindowname
14623 idTXT = Bodeca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
14626 txt = str(BeginFreq) +
" to " + str(EndFreq) +
" Hz"
14627 txt = txt +
" " + str(DBdivlist[DBdivindexBP.get()]) +
" dB/div"
14628 txt = txt +
" Level: " + str(DBlevelBP.get()) +
" dB "
14629 txt = txt +
" FFT Bandwidth =" +
' {0:.2f} '.format(FFTbandwidth)
14633 idTXT = Bodeca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
14635 if FreqTraceMode.get() == 1:
14636 txt =
"Normal mode "
14638 if FreqTraceMode.get() == 2:
14639 txt =
"Peak hold mode "
14641 if FreqTraceMode.get() == 3:
14642 txt =
"Power average mode (" + str(TRACEaverage.get()) +
") "
14644 if ZEROstuffing.get() > 0:
14645 txt = txt +
"Zero Stuffing = " + str(ZEROstuffing.get())
14647 if (RUNstatus.get() == 0):
14648 txt = txt +
" Stopped "
14650 if BodeDisp.get() == 1:
14651 txt = txt +
" Running "
14653 txt = txt +
" Display off "
14654 if FSweepMode.get() > 0:
14655 txt = txt +
" Freq Step = " + str(LoopNum.get())
14658 IDtxt = Bodeca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
14662 global FFTBuffA, FFTBuffB
14665 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
14682 global PeakdbA, PeakdbB, PeakRelPhase, PeakdbAB
14685 global RsystemEntry
14688 global ImpedanceMagnitude
14689 global ImpedanceAngle
14690 global ImpedanceRseries, ImpedanceXseries
14693 DEG2RAD = (math.pi / 180.0)
14696 ResValue = float(RsystemEntry.get())
14700 VA = math.pow(10,(PeakdbA/20))
14701 VB = math.pow(10,(PeakdbB/20))
14702 VVangleCosine = math.cos(math.radians(PeakRelPhase))
14703 if IA_Ext_Conf.get() == 1:
14704 VAB = math.pow(10,(PeakdbAB/20))
14709 VI = math.sqrt(VA**2 + VZ**2 - 2*VA*VZ*VVangleCosine)
14710 costheta = (VA**2 + VI**2 - VZ**2)/(2 * VA * VI)
14711 Za = ResValue * VA / VI
14712 ImpedanceRseries = Za * costheta - ResValue
14713 ImpedanceMagnitude = ResValue * VZ / VI
14715 ImpedanceXseries = math.sqrt(abs(ImpedanceMagnitude**2 - ImpedanceRseries**2))
14717 if(PeakRelPhase < 0.0):
14718 ImpedanceXseries = -ImpedanceXseries
14719 if IA_Ext_Conf.get() == 1:
14720 ImpedanceRseries = -ImpedanceRseries
14721 ImpedanceAngle = math.atan2(ImpedanceXseries, ImpedanceRseries) / DEG2RAD
14724 global FFTmemoryA, FFTresultA, FFTresultAB, PhaseAB
14725 global FFTmemoryB, FFTresultB
14726 global PhaseA, PhaseB, PhaseMemoryA, PhaseMemoryB
14727 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB, PeakRelPhase, PeakdbAB
14728 global PeakxM, PeakyM, PeakMdb, PeakfreqM, PeakphaseA, PeakphaseB
14729 global PeakfreqA, PeakfreqB, GainCorEntry, PhaseCorEntry, PhaseCorrection
14735 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, SMPfft
14736 global STARTsample, STOPsample, LoopNum, FSweepMode
14737 global TRACEmode, Two_X_Sample, IA_Ext_Conf
14738 global T1Vline, T2Vline, TMline, T1Pline, T2Pline
14742 global ImpedanceMagnitude
14743 global ImpedanceAngle
14744 global ImpedanceRseries, ImpedanceXseries
14747 TRACEsize = len(FFTresultA)
14748 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
14751 STARTsample = int(math.ceil(STARTsample))
14752 if Two_X_Sample.get() == 0:
14753 STOPsample = 45000 / Fsample
14755 STOPsample = 90000 / Fsample
14756 STOPsample = int(math.floor(STOPsample))
14758 RMScorr = 1.0 / SMPfft
14759 Powcorr = RMScorr **2
14761 GainCorrection = float(eval(GainCorEntry.get()))
14763 GainCorEntry.delete(0,END)
14764 GainCorEntry.insert(0, GainCorrection)
14767 PhaseCorrection = float(eval(PhaseCorEntry.get()))
14769 PhaseCorEntry.delete(0,END)
14770 PhaseCorEntry.insert(0, PhaseCorrection)
14772 MAXsample = TRACEsize
14773 if STARTsample > (MAXsample - 1):
14774 STARTsample = MAXsample - 1
14776 if STOPsample > MAXsample:
14777 STOPsample = MAXsample
14780 PeakfreqA = PeakfreqB = PeakfreqM = F = n * Fsample
14781 PeakphaseA = PhaseA[n]
14782 PeakphaseB = PhaseB[n]
14786 PeakdbA = 10 * math.log10(float(FFTresultA[n]))
14787 PeakdbB = 10 * math.log10(float(FFTresultB[n]))
14788 PeakMdb = PeakdbA - PeakdbB
14789 if IA_Ext_Conf.get() == 1:
14790 PeakdbAB = 10 * math.log10(float(FFTresultAB[n]))
14791 while n <= STOPsample:
14794 dbA = 10 * math.log10(float(FFTresultA[n]))
14800 PeakphaseA = PhaseA[n]
14804 dbB = 10 * math.log10(float(FFTresultB[n]))
14810 PeakphaseB = PhaseB[n]
14812 if IA_Ext_Conf.get() == 1:
14814 dbAB = 10 * math.log10(float(FFTresultAB[n]))
14817 if dbAB > PeakdbAB:
14819 PeakphaseAB = PhaseAB[n]
14820 RelPhase = PhaseA[n]-PhaseB[n]
14822 RelPhase = RelPhase - 360
14823 elif RelPhase < -180:
14824 RelPhase = RelPhase + 360
14825 if Two_X_Sample.get() == 0:
14826 PhErr = 0.0018 * n * Fsample
14827 RelPhase = RelPhase + PhErr - 12.0
14829 RelPhase = RelPhase - 9.0
14831 if IA_Ext_Conf.get() == 1:
14832 PeakRelPhase = PeakphaseAB-PeakphaseA
14834 PeakRelPhase = PeakphaseB-PeakphaseA
14836 if PeakRelPhase > 180:
14837 PeakRelPhase = PeakRelPhase - 360
14838 elif PeakRelPhase < -180:
14839 PeakRelPhase = PeakRelPhase + 360
14840 if Two_X_Sample.get() == 0:
14841 PhErr = 0.0018 * PeakSample * Fsample
14842 PeakRelPhase = PeakRelPhase + PhaseCorrection - PhErr
14844 PeakRelPhase = PeakRelPhase + PhaseCorrection
14845 PeakdbB = PeakdbB + GainCorrection
14850 global CANVASheightIA, CANVASwidthIA, IAca, TIAMline, TIAMRline
14851 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
14852 global PeakxM, PeakyM, PeakMdb, PeakfreqM, Two_X_Sample
14853 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
14854 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
14855 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
14856 global PeakphaseA, PeakphaseB, PeakRelPhase, PhaseCalEntry, CapZeroEntry
14857 global SmoothCurvesBP, TRACEwidth, GridWidth
14858 global COLORsignalband, COLORtext, COLORgrid, IASweepSaved
14859 global COLORtrace1, COLORtrace2, COLORtrace5, COLORtrace6
14860 global ResScale, DisplaySeries
14861 global FFTwindow, FFTbandwidth, ZEROstuffing, FFTwindowname
14866 global FontSize, IAGridType
14868 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, OverRangeFlagA, OverRangeFlagB
14870 global TRACEaverage
14871 global FreqTraceMode
14873 global ImpedanceMagnitude
14874 global ImpedanceAngle
14875 global ImpedanceRseries, ImpedanceXseries, Cseries
14876 global LoopNum, NetworkScreenStatus, NSweepSeriesR, NSweepSeriesX, NSweepSeriesMag, NSweepSeriesAng
14877 global NSweepParallelR, NSweepParallelC, NSweepParallelL, NSweepSeriesC, NSweepSeriesC
14881 SmoothBool = SmoothCurvesBP.get()
14885 Radius = (GRWIA-X0LIA)/(1 + Vdiv.get()*2)
14886 xright = 10 + GRWIA/2 + ( Vdiv.get() * Radius )
14887 OhmsperPixel = float(ResScale.get())/Radius
14888 TRadius = Radius * Vdiv.get()
14891 if IAGridType.get() == 0:
14896 Radius = (GRWIA-X0LIA)/(1 + Vdiv.get()*2)
14897 OhmsperPixel = float(ResScale.get())/Radius
14898 TRadius = Radius * Vdiv.get()
14899 xright = 10 + xcenter + ( Vdiv.get() * Radius )
14900 while (i <= Vdiv.get()):
14901 x0 = xcenter - ( i * Radius )
14902 x1 = xcenter + ( i * Radius )
14903 y0 = ycenter - ( i * Radius )
14904 y1 = ycenter + ( i * Radius )
14905 axisvalue = float(ResScale.get()) * i
14906 if axisvalue >= 1000.0
or axisvalue <= -1000.0:
14907 axisvalue = axisvalue / 1000
14908 ResTxt =
'{0:.1f}'.format(axisvalue)
14909 axis_label = str(ResTxt) +
"K"
14911 ResTxt =
'{0:.0f}'.format(axisvalue)
14912 axis_label = str(ResTxt)
14913 IAca.create_oval( x0, y0, x1, y1, outline=COLORgrid, width=GridWidth.get())
14914 IAca.create_line(xcenter, y0, xright, y0, fill=COLORgrid, width=GridWidth.get(), dash=(4,3))
14915 IAca.create_text(xright, y0, text=axis_label, fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
14918 IAca.create_line(xcenter, y0, xcenter, y1, fill=COLORgrid, width=GridWidth.get())
14919 IAca.create_line(x0, ycenter, x1, ycenter, fill=COLORgrid, width=GridWidth.get())
14920 RAngle = math.radians(45)
14921 y = TRadius*math.sin(RAngle)
14922 x = TRadius*math.cos(RAngle)
14923 IAca.create_line(xcenter-x, ycenter-y, xcenter+x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
14924 IAca.create_line(xcenter+x, ycenter-y, xcenter-x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
14925 IAca.create_text(x0, ycenter, text=
"180", fill=COLORgrid, anchor=
"e", font=(
"arial", FontSize+2 ))
14926 IAca.create_text(x1, ycenter, text=
"0.0", fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
14927 IAca.create_text(xcenter, y0, text=
"90", fill=COLORgrid, anchor=
"s", font=(
"arial", FontSize+2 ))
14928 IAca.create_text(xcenter, y1, text=
"-90", fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize+2 ))
14934 x2 = X0LIA + TRadius * 2
14935 xcenter = x1 + (TRadius)
14936 OhmsperPixel = float(ResScale.get())/Radius
14937 while (i <= Vdiv.get()):
14938 y = Y0TIA + j * (TRadius/Vdiv.get())
14939 Dline = [x1,y,x2,y]
14940 if i == 0
or i == Vdiv.get()
or i == -Vdiv.get():
14941 IAca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
14943 IAca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
14944 axisvalue = float(ResScale.get()) * -i
14945 if axisvalue >= 1000.0
or axisvalue <= -1000.0:
14946 axisvalue = axisvalue / 1000
14947 ResTxt =
'{0:.1f}'.format(axisvalue)
14948 axis_label = str(ResTxt) +
"K"
14950 ResTxt =
'{0:.0f}'.format(axisvalue)
14951 axis_label = str(ResTxt)
14952 IAca.create_text(x1-3, y, text=axis_label, fill=COLORtrace6, anchor=
"e", font=(
"arial", FontSize ))
14959 y2 = Y0TIA + TRadius * 2
14960 ycenter = y1 + (TRadius)
14962 while (i <= Vdiv.get()):
14963 x = x1 + j * (TRadius/Vdiv.get())
14964 Dline = [x,y1,x,y2]
14965 if i == 0
or i == Vdiv.get()
or i == -Vdiv.get():
14966 IAca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
14968 IAca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
14969 axisvalue = float(ResScale.get()) * i
14970 if axisvalue >= 1000.0
or axisvalue <= -1000.0:
14971 axisvalue = axisvalue / 1000
14972 ResTxt =
'{0:.1f}'.format(axisvalue)
14973 axis_label = str(ResTxt) +
"K"
14975 ResTxt =
'{0:.0f}'.format(axisvalue)
14976 axis_label = str(ResTxt)
14977 IAca.create_text(x, y2+3, text=axis_label, fill=COLORtrace1, anchor=
"n", font=(
"arial", FontSize ))
14982 if IASweepSaved.get() > 0:
14983 if len(TIAMRline) > 4:
14984 IAca.create_line(TIAMRline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14986 x1 = xcenter + ( ImpedanceRseries / OhmsperPixel )
14990 x1 = xcenter - xright
14991 IAca.create_line(xcenter, ycenter, x1, ycenter, fill=COLORtrace1, arrow=
"last", width=TRACEwidth.get())
14992 y1 = ycenter - ( ImpedanceXseries / OhmsperPixel )
14996 y1 = ycenter - xright
14999 IAca.create_line(xcenter, ycenter, xcenter, y1, fill=COLORtrace6, arrow=
"last", width=TRACEwidth.get())
15000 MagRadius = ImpedanceMagnitude / OhmsperPixel
15001 y1 = ycenter - MagRadius*math.sin(math.radians(ImpedanceAngle))
15005 y1 = ycenter - xright
15006 x1 = xcenter + MagRadius*math.cos(math.radians(ImpedanceAngle))
15010 x1 = xcenter - xright
15011 IAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace2, arrow=
"last", width=TRACEwidth.get())
15014 if len(NSweepSeriesMag) > 2:
15016 while index < len(NSweepSeriesMag):
15017 MagRadius = NSweepSeriesMag[index] / OhmsperPixel
15018 y1 = ycenter - MagRadius*math.sin(math.radians(NSweepSeriesAng[index]))
15022 y1 = ycenter - xright
15023 x1 = xcenter + MagRadius*math.cos(math.radians(NSweepSeriesAng[index]))
15027 x1 = xcenter - xright
15028 TIAMline.append(x1)
15029 TIAMline.append(y1)
15031 IAca.create_line(TIAMline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15033 if OverRangeFlagA == 1:
15036 IAca.create_rectangle(x-6, y-6, x+6, y+6, fill=
"#ff0000")
15037 IAca.create_text (x+12, y, text=
"CHA Over Range", anchor=W, fill=
"#ff0000", font=(
"arial", FontSize+4 ))
15038 if OverRangeFlagB == 1:
15041 IAca.create_rectangle(x-6, y-6, x+6, y+6, fill=
"#ff0000")
15042 IAca.create_text (x+12, y, text=
"CHB Over Range", anchor=W, fill=
"#ff0000", font=(
"arial", FontSize+4 ))
15045 txt =
" Sample rate: " + str(SAMPLErate)
15046 txt = txt +
" FFT samples: " + str(SMPfft)
15048 txt = txt +
" " + FFTwindowname
15052 idTXT = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
15054 x = X0LIA + GRWIA + 4
15056 txt =
"Gain " +
' {0:.2f} '.format(PeakdbB-PeakdbA) +
" dB"
15057 TXT9 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15059 txt =
"Phase " +
' {0:.2f} '.format(PeakRelPhase) +
" Degrees"
15060 TXT10 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15062 txt =
"Freq " +
' {0:.1f} '.format(PeakfreqA) +
" Hertz"
15063 TXT11 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15065 txt =
"Impedance Magnitude"
15066 TXT1 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15068 txt =
' {0:.1f} '.format(ImpedanceMagnitude)
15069 TXT2 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15071 txt =
"Impedance Angle"
15072 TXT3 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15074 txt =
' {0:.1f} '.format(ImpedanceAngle)
15075 TXT4 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15077 txt =
"Impedance R series"
15078 TXT5 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15080 txt =
' {0:.1f} '.format(ImpedanceRseries)
15081 TXT6 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15083 txt =
"Impedance X series"
15084 TXT7 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15086 txt =
' {0:.1f} '.format(ImpedanceXseries)
15087 TXT8 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15094 if ImpedanceXseries < 0:
15097 Cseries = -1 / ( 2 * math.pi * PeakfreqA * ImpedanceXseries )
15100 Qseries = 1/(2*math.pi*PeakfreqA*Cseries*ImpedanceRseries)
15101 Cparallel = Cseries * (Qseries**2 / (1+Qseries**2))
15102 Cparallel = Cparallel * 1E6
15103 Rparallel = ImpedanceRseries * (1+Qseries**2)
15104 Cseries = Cseries * 1E6
15105 if DisplaySeries.get() == 0:
15106 txt =
"Series Capacitance"
15107 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15110 Ctext = Cseries * 1E3
15112 Ctext = Ctext * 1E3
15113 CtextDis = Ctext + float(CapZeroEntry.get())
15114 txt =
' {0:.1f} '.format(CtextDis) +
"pF"
15116 txt =
' {0:.3f} '.format(Ctext) +
"nF"
15118 txt =
' {0:.3f} '.format(Cseries) +
"uF"
15119 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15122 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15125 Ctext = Cparallel * 1E3
15127 Ctext = Ctext * 1E3
15128 txt =
"Capacitance " +
' {0:.1f} '.format(Ctext) +
"pF"
15130 txt =
"Capacitance " +
' {0:.3f} '.format(Ctext) +
"nF"
15132 txt =
"Capacitance " +
' {0:.3f} '.format(Cparallel) +
"uF"
15133 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15135 txt =
"Resistance" +
' {0:.1f} '.format(Rparallel) +
"ohms"
15136 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15138 dissp = abs(ImpedanceRseries/ImpedanceXseries) * 100
15139 txt =
'D = {0:.2f} '.format(dissp) +
" %"
15140 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15142 elif ImpedanceXseries > 0:
15145 Lseries = ImpedanceXseries / ( 2 * 3.14159 * PeakfreqA )
15148 Qseries = (2*math.pi*PeakfreqA*Lseries)/ImpedanceRseries
15151 Lparallel = Lseries * ((1+Qseries**2) / Qseries**2)
15152 Lparallel = Lparallel * 1E3
15153 Rparallel = ImpedanceRseries * (1+Qseries**2)
15154 Lseries = Lseries * 1E3
15155 if DisplaySeries.get() == 0:
15156 txt =
"Series Inductance"
15157 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15160 Ltext = Lseries * 1E3
15161 txt =
' {0:.2f} '.format(Ltext) +
"uH"
15163 txt =
' {0:.2f} '.format(Lseries) +
"mH"
15164 IAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15167 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15170 Ltext = Lparallel * 1E3
15171 txt =
"Inductance " +
' {0:.2f} '.format(Ltext) +
"uH"
15173 txt =
"Inductance " +
' {0:.2f} '.format(Lparallel) +
"mH"
15174 IAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15176 txt =
"Resistance" +
' {0:.1f} '.format(Rparallel) +
"ohms"
15177 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15179 qf = abs(ImpedanceXseries/ImpedanceRseries) * 100
15180 txt =
'Q = {0:.2f} '.format(qf)
15181 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15183 if LoopNum.get() > 1:
15184 if NetworkScreenStatus.get() > 0:
15185 NSweepSeriesR.append(ImpedanceRseries)
15186 NSweepSeriesX.append(ImpedanceXseries)
15187 NSweepSeriesMag.append(ImpedanceMagnitude)
15188 NSweepSeriesAng.append(ImpedanceAngle)
15189 NSweepParallelR.append(Rparallel)
15190 NSweepParallelC.append(Cparallel)
15191 NSweepParallelL.append(Lparallel)
15192 NSweepSeriesC.append(Cseries)
15193 NSweepSeriesL.append(Lseries)
15195 if Two_X_Sample.get() == 0:
15196 txt =
"0.0 to 45000 Hz"
15198 txt =
"0.0 to 90000 Hz"
15199 txt = txt +
" FFT Bandwidth =" +
' {0:.2f} '.format(FFTbandwidth)
15203 idTXT = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
15205 if FreqTraceMode.get() == 1:
15206 txt =
"Normal mode "
15208 if FreqTraceMode.get() == 2:
15209 txt =
"Peak hold mode "
15211 if FreqTraceMode.get() == 3:
15212 txt =
"Power average mode (" + str(TRACEaverage.get()) +
") "
15214 if ZEROstuffing.get() > 0:
15215 txt = txt +
"Zero Stuffing = " + str(ZEROstuffing.get())
15217 if (RUNstatus.get() == 0):
15218 txt = txt +
" Stopped "
15220 txt = txt +
" Running "
15222 IDtxt = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
15225 global IAca, GRWIA, XOLIA, GRHIA, Y0TIA, CANVASwidthIA, CANVASheightIA, FontSize
15227 CANVASwidthIA = event.width - 4
15228 CANVASheightIA = event.height - 4
15229 GRWIA = CANVASwidthIA - (2 * X0LIA) - int(21.25 * FontSize)
15230 GRHIA = CANVASheightIA - Y0TIA - int(2.25 * FontSize)
15235 global iawindow, IAca, logo, IAScreenStatus, RsystemEntry, IADisp, AWGSync, IASource
15236 global COLORcanvas, CANVASwidthIA, CANVASheightIA, RevDate, AWGAMode, AWGAShape, AWGBMode, AWG_2X
15237 global FFTwindow, CutDC, ColorMode, ResScale, GainCorEntry, PhaseCorEntry, DisplaySeries
15238 global GRWIA, X0LIA, GRHIA, Y0TIA, IA_Ext_Conf, DeBugMode, SWRev, CapZeroEntry
15239 global NetworkScreenStatus, IASweepSaved, IAGridType
15240 global FrameRefief, BorderSize
15242 if IAScreenStatus.get() == 0:
15243 IAScreenStatus.set(1)
15247 CANVASwidthIA = 170 + GRWIA + 2 * X0LIA
15248 CANVASheightIA = GRHIA + Y0TIA + 10
15252 if AWG_2X.get == 1:
15259 iawindow = Toplevel()
15260 iawindow.title(
"Impedance Analyzer " + SWRev + RevDate)
15261 iawindow.protocol(
"WM_DELETE_WINDOW", DestroyIAScreen)
15262 frame2iar = Frame(iawindow, borderwidth=BorderSize, relief=FrameRefief)
15263 frame2iar.pack(side=RIGHT, expand=NO, fill=BOTH)
15265 frame2ia = Frame(iawindow, borderwidth=BorderSize, relief=FrameRefief)
15266 frame2ia.pack(side=TOP, expand=YES, fill=BOTH)
15268 IAca = Canvas(frame2ia, width=CANVASwidthIA, height=CANVASheightIA, background=COLORcanvas, cursor=
'cross')
15269 IAca.bind(
"<Configure>", IACaresize)
15270 IAca.bind(
"<Return>", DoNothing)
15271 IAca.bind(
"<space>", onCanvasSpaceBar)
15272 IAca.pack(side=TOP, expand=YES, fill=BOTH)
15276 dropmenu = Frame( frame2iar )
15277 dropmenu.pack(side=TOP)
15279 IAFilemenu = Menubutton(dropmenu, text=
"File", style=
"W5.TButton")
15280 IAFilemenu.menu = Menu(IAFilemenu, tearoff = 0 )
15281 IAFilemenu[
"menu"] = IAFilemenu.menu
15282 IAFilemenu.menu.add_command(label=
"Save Config", command=BSaveConfigIA)
15283 IAFilemenu.menu.add_command(label=
"Load Config", command=BLoadConfigIA)
15284 IAFilemenu.menu.add_command(label=
"Run Script", command=RunScript)
15285 IAFilemenu.menu.add_command(label=
"Save V Cal", command=BSaveCal)
15286 IAFilemenu.menu.add_command(label=
"Load V Cal", command=BLoadCal)
15287 IAFilemenu.menu.add_command(label=
"Save Data", command=BSaveDataIA)
15288 IAFilemenu.menu.add_command(label=
"Save Screen", command=BSaveScreenIA)
15289 IAFilemenu.menu.add_command(label=
"Help", command=BHelp)
15290 IAFilemenu.pack(side=LEFT, anchor=W)
15292 IAOptionmenu = Menubutton(dropmenu, text=
"Options", style=
"W8.TButton")
15293 IAOptionmenu.menu = Menu(IAOptionmenu, tearoff = 0 )
15294 IAOptionmenu[
"menu"] = IAOptionmenu.menu
15295 IAOptionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
15296 IAOptionmenu.menu.add_command(label=
'Set Sample Rate', command=MakeSampleRateMenu)
15297 IAOptionmenu.menu.add_checkbutton(label=
'Cut-DC', variable=CutDC)
15298 IAOptionmenu.menu.add_checkbutton(label=
'Sweep-on', variable=NetworkScreenStatus)
15299 IAOptionmenu.menu.add_checkbutton(label=
'Save Sweep', variable=IASweepSaved, command=BSaveIASweep)
15301 IAOptionmenu.menu.add_command(label=
"-Ext Config-", command=donothing)
15302 IAOptionmenu.menu.add_radiobutton(label=
'1', variable=IA_Ext_Conf, value=0)
15303 IAOptionmenu.menu.add_radiobutton(label=
'2', variable=IA_Ext_Conf, value=1)
15304 IAOptionmenu.menu.add_command(label=
"-Meas As-", command=donothing)
15305 IAOptionmenu.menu.add_radiobutton(label=
'Series', variable=DisplaySeries, value=0)
15306 IAOptionmenu.menu.add_radiobutton(label=
'Parallel', variable=DisplaySeries, value=1)
15307 IAOptionmenu.menu.add_command(label=
"-Background-", command=donothing)
15308 IAOptionmenu.menu.add_radiobutton(label=
'Black', variable=ColorMode, value=0, command=BgColor)
15309 IAOptionmenu.menu.add_radiobutton(label=
'White', variable=ColorMode, value=1, command=BgColor)
15310 IAOptionmenu.pack(side=LEFT, anchor=W)
15312 rsemenu = Frame( frame2iar )
15313 rsemenu.pack(side=TOP)
15314 rseb2 = Button(rsemenu, text=
"Stop", style=
"Stop.TButton", command=BStop)
15315 rseb2.pack(side=RIGHT)
15316 rseb3 = Button(rsemenu, text=
"Run", style=
"Run.TButton", command=BStartIA)
15317 rseb3.pack(side=RIGHT)
15319 IAFFTwindmenu = Menubutton(frame2iar, text=
"FFTwindow", style=
"W11.TButton")
15320 IAFFTwindmenu.menu = Menu(IAFFTwindmenu, tearoff = 0 )
15321 IAFFTwindmenu[
"menu"] = IAFFTwindmenu.menu
15322 IAFFTwindmenu.menu.add_radiobutton(label=
'Rectangular window (B=1)', variable=FFTwindow, value=0)
15323 IAFFTwindmenu.menu.add_radiobutton(label=
'Cosine window (B=1.24)', variable=FFTwindow, value=1)
15324 IAFFTwindmenu.menu.add_radiobutton(label=
'Triangular window (B=1.33)', variable=FFTwindow, value=2)
15325 IAFFTwindmenu.menu.add_radiobutton(label=
'Hann window (B=1.5)', variable=FFTwindow, value=3)
15326 IAFFTwindmenu.menu.add_radiobutton(label=
'Blackman window (B=1.73)', variable=FFTwindow, value=4)
15327 IAFFTwindmenu.menu.add_radiobutton(label=
'Nuttall window (B=2.02)', variable=FFTwindow, value=5)
15328 IAFFTwindmenu.menu.add_radiobutton(label=
'Flat top window (B=3.77)', variable=FFTwindow, value=6)
15329 IAFFTwindmenu.pack(side=TOP)
15331 smpmenu = Frame( frame2iar )
15332 smpmenu.pack(side=TOP)
15333 smpb1 = Button(smpmenu, text=
"-Samples", style=
"W8.TButton", command=Bsamples1)
15334 smpb1.pack(side=LEFT)
15335 smpb2 = Button(smpmenu, text=
"+Samples", style=
"W8.TButton", command=Bsamples2)
15336 smpb2.pack(side=LEFT)
15338 rsystem = Frame( frame2iar )
15339 rsystem.pack(side=TOP)
15340 rsystemlab = Label(rsystem, text=
"Ext Res")
15341 rsystemlab.pack(side=LEFT, anchor=W)
15342 RsystemEntry = Entry(rsystem, width=7, cursor=
'double_arrow')
15343 RsystemEntry.bind(
'<Return>', onTextKey)
15344 RsystemEntry.bind(
'<MouseWheel>', onTextScroll)
15345 RsystemEntry.bind(
"<Button-4>", onTextScroll)
15346 RsystemEntry.bind(
"<Button-5>", onTextScroll)
15347 RsystemEntry.bind(
'<Key>', onTextKey)
15348 RsystemEntry.pack(side=LEFT, anchor=W)
15349 RsystemEntry.delete(0,
"end")
15350 RsystemEntry.insert(4,1000)
15352 ressb = Frame( frame2iar )
15353 ressb.pack(side=TOP)
15354 reslab = Label(ressb, text=
"Ohms/div ")
15355 reslab.pack(side=LEFT)
15356 ResScale = Spinbox(ressb, width=7, cursor=
'double_arrow', values=ResScalediv)
15357 ResScale.bind(
'<MouseWheel>', onSpinBoxScroll)
15358 ResScale.bind(
"<Button-4>", onSpinBoxScroll)
15359 ResScale.bind(
"<Button-5>", onSpinBoxScroll)
15360 ResScale.pack(side=LEFT)
15361 ResScale.delete(0,
"end")
15362 ResScale.insert(0,500)
15364 GainCor = Frame( frame2iar )
15365 GainCor.pack(side=TOP)
15366 GainCorlab = Label(GainCor, text=
"Gain Cor dB")
15367 GainCorlab.pack(side=LEFT, anchor=W)
15368 GainCorEntry = Entry(GainCor, width=7, cursor=
'double_arrow')
15369 GainCorEntry.bind(
'<Return>', onTextKey)
15370 GainCorEntry.bind(
'<MouseWheel>', onTextScroll)
15371 GainCorEntry.bind(
"<Button-4>", onTextScroll)
15372 GainCorEntry.bind(
"<Button-5>", onTextScroll)
15373 GainCorEntry.bind(
'<Key>', onTextKey)
15374 GainCorEntry.pack(side=LEFT, anchor=W)
15375 GainCorEntry.delete(0,
"end")
15376 GainCorEntry.insert(4,0.0)
15378 PhaseCor = Frame( frame2iar )
15379 PhaseCor.pack(side=TOP)
15380 PhaseCorlab = Label(PhaseCor, text=
"Phase Cor")
15381 PhaseCorlab.pack(side=LEFT, anchor=W)
15382 PhaseCorEntry = Entry(PhaseCor, width=7, cursor=
'double_arrow')
15383 PhaseCorEntry.bind(
'<Return>', onTextKey)
15384 PhaseCorEntry.bind(
'<MouseWheel>', onTextScroll)
15385 PhaseCorEntry.bind(
"<Button-4>", onTextScroll)
15386 PhaseCorEntry.bind(
"<Button-5>", onTextScroll)
15387 PhaseCorEntry.bind(
'<Key>', onTextKey)
15388 PhaseCorEntry.pack(side=LEFT, anchor=W)
15389 PhaseCorEntry.delete(0,
"end")
15390 PhaseCorEntry.insert(4,0.0)
15392 capofflab = Label(frame2iar, text=
"Capacitance Offset")
15393 capofflab.pack(side=TOP)
15394 CapZero = Frame( frame2iar )
15395 CapZero.pack(side=TOP)
15396 CapZerobutton = Button(CapZero, text=
"Zero", style=
"W4.TButton", command=IACapZero)
15397 CapZerobutton.pack(side=LEFT, anchor=W)
15398 CapResetbutton = Button(CapZero, text=
"Reset", style=
"W5.TButton", command=IACapReset)
15399 CapResetbutton.pack(side=LEFT, anchor=W)
15400 CapZeroEntry = Entry(CapZero, width=6, cursor=
'double_arrow')
15401 CapZeroEntry.bind(
'<Return>', onTextKey)
15402 CapZeroEntry.bind(
'<MouseWheel>', onTextScroll)
15403 CapZeroEntry.bind(
"<Button-4>", onTextScroll)
15404 CapZeroEntry.bind(
"<Button-5>", onTextScroll)
15405 CapZeroEntry.bind(
'<Key>', onTextKey)
15406 CapZeroEntry.pack(side=LEFT, anchor=W)
15407 CapZeroEntry.delete(0,
"end")
15408 CapZeroEntry.insert(4,0.0)
15410 srclab = Label(frame2iar, text=
"Source")
15411 srclab.pack(side=TOP)
15412 extsrc1 = Radiobutton(frame2iar, text=
"Internal", variable=IASource, value=0, command=IASourceSet)
15413 extsrc1.pack(side=TOP)
15414 extsrc2 = Radiobutton(frame2iar, text=
"External", variable=IASource, value=1, command=IASourceSet)
15415 extsrc2.pack(side=TOP)
15417 gridmenu = Frame( frame2iar )
15418 gridmenu.pack(side=TOP)
15419 iagrid1= Radiobutton(frame2iar, text=
"Polar Grid", variable=IAGridType, value=0)
15420 iagrid1.pack(side=TOP)
15421 iagrid2 = Radiobutton(frame2iar, text=
"Rect Grid", variable=IAGridType, value=1)
15422 iagrid2.pack(side=TOP)
15424 dismiss1button = Button(frame2iar, text=
"Dismiss", style=
"W8.TButton", command=DestroyIAScreen)
15425 dismiss1button.pack(side=TOP)
15427 ADI1 = Label(frame2iar, image=logo, anchor=
"sw", compound=
"top")
15428 ADI1.pack(side=TOP)
15431 global iawindow, IAScreenStatus, IAca, IADisp
15433 IAScreenStatus.set(0)
15439 global TIAMline, TIAMRline, IASweepSaved
15441 if IASweepSaved.get() > 0:
15442 TIAMRline = TIAMline
15445 global Cseries, CapZeroEntry
15447 Ctext =
' {0:.1f} '.format(-Cseries * 1E6)
15448 CapZeroEntry.delete(0,
"end")
15449 CapZeroEntry.insert(6,Ctext)
15452 global CapZeroEntry
15454 CapZeroEntry.delete(0,
"end")
15455 CapZeroEntry.insert(4,0.0)
15458 global nqpwindow, NqPca, logo, NqPScreenStatus, NqPDisp
15459 global COLORcanvas, CANVASwidthNqP, CANVASheightNqP, RevDate
15460 global GRWNqP, X0LNqP, GRHNqP, Y0TNqP, DeBugMode, SWRev
15461 global NetworkScreenStatus, NqPSweepSaved
15462 global FrameRefief, BorderSize
15464 if NqPScreenStatus.get() == 0:
15465 NqPScreenStatus.set(1)
15467 CANVASwidthNqP = GRWNqP + (2 * X0LNqP)
15468 CANVASheightNqP = GRHNqP + Y0TNqP + 10
15469 nqpwindow = Toplevel()
15470 nqpwindow.title(
"Nyquist Plot " + SWRev + RevDate)
15471 nqpwindow.protocol(
"WM_DELETE_WINDOW", DestroyNqPScreen)
15473 frame2nqp = Frame(nqpwindow, borderwidth=BorderSize, relief=FrameRefief)
15474 frame2nqp.pack(side=TOP, expand=YES, fill=BOTH)
15476 NqPca = Canvas(frame2nqp, width=CANVASwidthNqP, height=CANVASheightNqP, background=COLORcanvas, cursor=
'cross')
15477 NqPca.bind(
"<Configure>", NqPCaresize)
15478 NqPca.bind(
"<Return>", DoNothing)
15479 NqPca.bind(
"<space>", onCanvasSpaceBar)
15480 NqPca.pack(side=TOP, expand=YES, fill=BOTH)
15483 global nqpwindow, NqPScreenStatus, NqPca, NqPDisp
15485 NqPScreenStatus.set(0)
15487 nqpwindow.destroy()
15490 global NqPca, GRWNqP, XOLNqP, GRHNqP, Y0TNqP, CANVASwidthNqP, CANVASheightNqP, FontSize
15492 CANVASwidthNqP = event.width - 4
15493 CANVASheightNqP = event.height - 4
15494 GRWNqP = CANVASwidthNqP - (2 * X0LNqP)
15495 GRHNqP = CANVASheightNqP - Y0TNqP - int(1.25 * FontSize)
15500 global NqPca, GRWNqP, XOLNqP, GRHNqP, Y0TNqP, CANVASwidthNqP, CANVASheightNqP, COLORtrace1
15501 global COLORgrid, GridWidth, SmoothCurvesBP, SmoothBool, DBlevelBP, DBdivlist, DBdivindexBP
15502 global FSweepAdB, FSweepBdB, FSweepBPh, FSweepAPh, ShowMathBP, NqPline, Two_X_Sample, TRACEwidth
15503 global Vdiv, FBins, FStep
15508 SmoothBool = SmoothCurvesBP.get()
15513 Radius = (GRWNqP-X0LNqP)/(1 + Vdiv.get() * 2)
15514 dBperPixel = float(DBdivlist[DBdivindexBP.get()])/Radius
15515 TRadius = Radius * Vdiv.get()
15517 x2 = X0LNqP + GRWNqP
15518 xright = 10 + xcenter + ( Vdiv.get() * Radius )
15519 while (i <= Vdiv.get()):
15520 x0 = xcenter - ( i * Radius )
15521 x1 = xcenter + ( i * Radius )
15522 y0 = ycenter - ( i * Radius )
15523 y1 = ycenter + ( i * Radius )
15524 dBaxis_value = (DBlevelBP.get() - (i * DBdivlist[DBdivindexBP.get()]))
15525 NqPca.create_oval( x0, y0, x1, y1, outline=COLORgrid, width=GridWidth.get())
15526 NqPca.create_line(xcenter, y0, xright, y0, fill=COLORgrid, width=GridWidth.get(), dash=(4,3))
15527 NqPca.create_text(xright, y0, text=str(dBaxis_value), fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
15530 NqPca.create_line(xcenter, y0, xcenter, y1, fill=COLORgrid, width=GridWidth.get())
15531 NqPca.create_line(x0, ycenter, x1, ycenter, fill=COLORgrid, width=GridWidth.get())
15532 RAngle = math.radians(45)
15533 y = TRadius*math.sin(RAngle)
15534 x = TRadius*math.cos(RAngle)
15535 NqPca.create_line(xcenter-x, ycenter-y, xcenter+x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
15536 NqPca.create_line(xcenter+x, ycenter-y, xcenter-x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
15537 NqPca.create_text(x0, ycenter, text=
"180", fill=COLORgrid, anchor=
"e", font=(
"arial", FontSize+2 ))
15538 NqPca.create_text(x1, ycenter, text=
"0.0", fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
15539 NqPca.create_text(xcenter, y0, text=
"90", fill=COLORgrid, anchor=
"s", font=(
"arial", FontSize+2 ))
15540 NqPca.create_text(xcenter, y1, text=
"-90", fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize+2 ))
15544 if len(FSweepAdB) > 4:
15545 for index
in range(len(FSweepAdB)):
15546 if index < len(FStep):
15547 F = FBins[int(FStep[index])]
15549 F = FBins[int(FStep[0])]
15551 dbA = 10 * math.log10(float(FSweepAdB[index]))
15552 dbB = 10 * math.log10(float(FSweepBdB[index]))
15553 if ShowMathBP.get() == 1:
15555 elif ShowMathBP.get() == 2:
15557 MagRadius = (-MdB / dBperPixel) + (DBlevelBP.get()/dBperPixel)
15559 RelPhase = FSweepBPh[index] - FSweepAPh[index]
15561 RelPhase = RelPhase - 360
15562 elif RelPhase < -180:
15563 RelPhase = RelPhase + 360
15564 if Two_X_Sample.get() == 0:
15566 RelPhase = RelPhase - PhErr
15568 RelPhase = RelPhase
15569 y1 = ycenter - MagRadius*math.sin(math.radians(RelPhase))
15573 y1 = ycenter - xright
15574 x1 = xcenter + MagRadius*math.cos(math.radians(RelPhase ))
15578 x1 = xcenter - xright
15581 NqPca.create_line(NqPline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15584 global NiCScreenStatus, NiCDisp
15585 global nicwindow, NiCca, logo, SWRev
15586 global COLORcanvas, CANVASwidthNic, CANVASheightNic, RevDate
15587 global GRWNiC, X0LNiC, GRHNiC, Y0TNiC, DeBugMode
15588 global NetworkScreenStatus, NiCSweepSaved
15589 global FrameRefief, BorderSize
15591 if NiCScreenStatus.get() == 0:
15592 NiCScreenStatus.set(1)
15594 CANVASwidthNic = GRWNiC + 18 + X0LNiC
15595 CANVASheightNic = GRHNiC + 60
15596 nicwindow = Toplevel()
15597 nicwindow.title(
"Nichols Plot " + SWRev + RevDate)
15598 nicwindow.protocol(
"WM_DELETE_WINDOW", DestroyNiCScreen)
15600 frame2nic = Frame(nicwindow, borderwidth=BorderSize, relief=FrameRefief)
15601 frame2nic.pack(side=TOP, expand=YES, fill=BOTH)
15603 NiCca = Canvas(frame2nic, width=CANVASwidthNic, height=CANVASheightNic, background=COLORcanvas, cursor=
'cross')
15604 NiCca.bind(
"<Configure>", NiCCaresize)
15605 NiCca.bind(
"<Return>", DoNothing)
15606 NiCca.bind(
"<space>", onCanvasSpaceBar)
15607 NiCca.pack(side=TOP, expand=YES, fill=BOTH)
15610 global nicwindow, NiCScreenStatus, NiCca, NiCDisp
15612 NiCScreenStatus.set(0)
15614 nicwindow.destroy()
15617 global NiCca, GRWNiC, XOLNiC, GRHNiC, Y0TNiC, CANVASwidthNic, CANVASheightNic, FontSize
15619 CANVASwidthNic = event.width - 4
15620 CANVASheightNic = event.height - 4
15621 GRWNiC = CANVASwidthNic - int(2.25 * FontSize) - X0LNiC
15622 GRHNiC = CANVASheightNic - int(7.5 * FontSize)
15627 global NiCline, NiCca, CANVASwidthNic, CANVASheightNic, X0LNiC, GRWNiC, Y0TNiC, GRHNiC, X0TNiC
15628 global COLORzeroline, GridWidth, COLORgrid, FSweepAdB, FSweepBdB, Two_X_Sample, ShowMathBP
15629 global FSweepBPh, FSweepAPh, SmoothCurvesBP, SmoothBool, DBlevelBP, DBdivlist, DBdivindexBP
15630 global Vdiv, FBins, FStep, PhCenBodeEntry, RelPhaseCenter
15634 Ymax = Y0TNiC + GRHNiC
15636 Xmax = X0LNiC + GRWNiC
15638 Phasecenter = int(PhCenBodeEntry.get())
15639 RelPhaseCenter.set(Phasecenter)
15641 PhCenBodeEntry.delete(0,
"end")
15642 PhCenBodeEntry.insert(0,0)
15643 RelPhaseCenter.set(0)
15647 SmoothBool = SmoothCurvesBP.get()
15652 x2 = X0TNiC = X0LNiC + GRWNiC
15653 mg_siz = GRWNiC/10.0
15654 mg_inc = mg_siz/5.0
15655 DegPerDiv = 360 / 10
15656 while (i < Vdiv.get()+1):
15657 dBaxis_value = (DBlevelBP.get() - (i * DBdivlist[DBdivindexBP.get()]))
15658 y = Y0TNiC + i * GRHNiC/Vdiv.get()
15659 Dline = [x1,y,x2,y]
15660 if dBaxis_value == 0:
15661 NiCca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
15666 Dline = [x1+k*mg_siz+l*mg_inc,y-5,x1+k*mg_siz+l*mg_inc,y+5]
15667 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
15671 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
15672 dBaxis_label = str(dBaxis_value)
15673 NiCca.create_text(x1-3, y, text=dBaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
15679 y2 = Y0TNiC + GRHNiC
15680 mg_siz = GRHNiC/10.0
15681 mg_inc = mg_siz/5.0
15684 x = X0LNiC + i * GRWNiC/10.0
15685 Dline = [x,y1,x,y2]
15686 axis_value = Phasecenter - 180 + (i * DegPerDiv)
15687 axis_label = str(axis_value)
15688 if ( axis_value == 0):
15689 NiCca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
15694 Dline = [x-5,y1+k*mg_siz+l*mg_inc,x+5,y1+k*mg_siz+l*mg_inc]
15695 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
15699 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
15700 NiCca.create_text(x, y2+3, text=axis_label, fill=COLORtrace3, anchor=
"n", font=(
"arial", FontSize ))
15704 Yconv = float(GRHNiC) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
15705 Yc = float(Y0TNiC) + Yconv * (DBlevelBP.get())
15706 Xphconv = float(GRWNiC / 360.0)
15707 Xp = float(X0LNiC) + Xphconv * 180.0
15711 if len(FSweepAdB) > 4:
15713 for index
in range(len(FSweepAdB)):
15714 if index < len(FStep):
15715 F = FBins[int(FStep[index])]
15717 F = FBins[int(FStep[0])]
15719 dbA = 10 * math.log10(float(FSweepAdB[index]))
15720 dbB = 10 * math.log10(float(FSweepBdB[index]))
15721 if ShowMathBP.get() == 1:
15723 elif ShowMathBP.get() == 2:
15725 yb = Yc - Yconv * MdB
15731 RelPhase = FSweepBPh[index] - FSweepAPh[index]
15732 RelPhase = RelPhase - Phasecenter
15734 RelPhase = RelPhase - 360
15735 elif RelPhase < -180:
15736 RelPhase = RelPhase + 360
15737 if Two_X_Sample.get() == 0:
15739 RelPhase = RelPhase - PhErr
15741 RelPhase = RelPhase
15742 xa = Xp + Xphconv * RelPhase
15747 NiCline.append(int(xa + 0.5))
15748 NiCline.append(int(yb + 0.5))
15749 NiCca.create_line(NiCline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15752 global FFTBuffA, FFTBuffB
15755 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
15771 global FFTBuffA, FFTBuffB
15774 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
15793 if vat_btn.config(
'text')[-1] ==
'ON':
15794 vat_btn.config(text=
'OFF', style=
"Stop.TButton")
15796 vat_btn.config(text=
'ON', style=
"Run.TButton")
15801 if vabt_btn.config(
'text')[-1] ==
'ON':
15802 vabt_btn.config(text=
'OFF', style=
"Stop.TButton")
15804 vabt_btn.config(text=
'ON', style=
"Run.TButton")
15809 if vbt_btn.config(
'text')[-1] ==
'ON':
15810 vbt_btn.config(text=
'OFF', style=
"Stop.TButton")
15812 vbt_btn.config(text=
'ON', style=
"Run.TButton")
15817 if iat_btn.config(
'text')[-1] ==
'ON':
15818 iat_btn.config(text=
'OFF', style=
"Stop.TButton")
15820 iat_btn.config(text=
'ON', style=
"Run.TButton")
15825 if ibt_btn.config(
'text')[-1] ==
'ON':
15826 ibt_btn.config(text=
'OFF', style=
"Stop.TButton")
15828 ibt_btn.config(text=
'ON', style=
"Run.TButton")
15832 global phawindow, PhAca, logo, PhAScreenStatus, PhADisp, AWGSync
15833 global COLORcanvas, CANVASwidthPhA, CANVASheightPhA, RevDate, AWGAMode, AWGAShape, AWGBMode
15834 global FFTwindow, CutDC, ColorMode, RefPhase, CHvpdiv, CHipdiv
15835 global GRWPhA, X0LPhA, GRHPhA, Y0TPhA, DeBugMode, SWRev, PhAPlotMode
15836 global VScale, IScale, RefphEntry, MuxScreenStatus, AppendPhAData
15837 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn
15838 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D
15839 global FrameRefief, BorderSize
15841 if PhAScreenStatus.get() == 0:
15842 PhAScreenStatus.set(1)
15846 CANVASwidthPhA = 170 + GRWPhA + 2 * X0LPhA
15847 CANVASheightPhA = GRHPhA + Y0TPhA + 10
15848 phawindow = Toplevel()
15849 phawindow.title(
"Phase Analyzer " + SWRev + RevDate)
15850 phawindow.protocol(
"WM_DELETE_WINDOW", DestroyPhAScreen)
15851 frame2phar = Frame(phawindow, borderwidth=BorderSize, relief=FrameRefief)
15852 frame2phar.pack(side=RIGHT, expand=NO, fill=BOTH)
15854 frame2pha = Frame(phawindow, borderwidth=BorderSize, relief=FrameRefief)
15855 frame2pha.pack(side=TOP, expand=YES, fill=BOTH)
15857 PhAca = Canvas(frame2pha, width=CANVASwidthPhA, height=CANVASheightPhA, background=COLORcanvas, cursor=
'cross')
15858 PhAca.bind(
"<Configure>", PhACaresize)
15859 PhAca.bind(
"<Return>", DoNothing)
15860 PhAca.bind(
"<space>", onCanvasSpaceBar)
15861 PhAca.pack(side=TOP, expand=YES, fill=BOTH)
15863 if MuxScreenStatus.get() == 0:
15864 RefPhase = (
"CA-V",
"CB-V",
"CA-I",
"CB-I")
15866 RefPhase = (
"CA-V",
"CB-A",
"CB-B",
"CB-C",
"CB-D",
"CA-I",
"CB-I")
15869 dropmenu = Frame( frame2phar )
15870 dropmenu.pack(side=TOP)
15872 PhAFilemenu = Menubutton(dropmenu, text=
"File", style=
"W5.TButton")
15873 PhAFilemenu.menu = Menu(PhAFilemenu, tearoff = 0 )
15874 PhAFilemenu[
"menu"] = PhAFilemenu.menu
15875 PhAFilemenu.menu.add_command(label=
"Save Config", command=BSaveConfigIA)
15876 PhAFilemenu.menu.add_command(label=
"Load Config", command=BLoadConfigIA)
15877 PhAFilemenu.menu.add_command(label=
"Run Script", command=RunScript)
15878 PhAFilemenu.menu.add_command(label=
"Save Data", command=BSavePhAData)
15879 PhAFilemenu.menu.add_checkbutton(label=
' - Append', variable=AppendPhAData)
15880 PhAFilemenu.menu.add_command(label=
"Plot From File", command=PlotPhAFromFile)
15881 PhAFilemenu.menu.add_radiobutton(label=
' - Vectors', variable=PhAPlotMode, value=0)
15882 PhAFilemenu.menu.add_radiobutton(label=
' - Outline', variable=PhAPlotMode, value=1)
15883 PhAFilemenu.menu.add_command(label=
"Help", command=BHelp)
15884 PhAFilemenu.pack(side=LEFT, anchor=W)
15886 PhAOptionmenu = Menubutton(dropmenu, text=
"Options", style=
"W8.TButton")
15887 PhAOptionmenu.menu = Menu(PhAOptionmenu, tearoff = 0 )
15888 PhAOptionmenu[
"menu"] = PhAOptionmenu.menu
15889 PhAOptionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
15890 PhAOptionmenu.menu.add_command(label=
'Set Sample Rate', command=MakeSampleRateMenu)
15891 PhAOptionmenu.menu.add_checkbutton(label=
'Cut-DC', variable=CutDC)
15893 PhAOptionmenu.menu.add_command(label=
"-Background-", command=donothing)
15894 PhAOptionmenu.menu.add_radiobutton(label=
'Black', variable=ColorMode, value=0, command=BgColor)
15895 PhAOptionmenu.menu.add_radiobutton(label=
'White', variable=ColorMode, value=1, command=BgColor)
15896 PhAOptionmenu.pack(side=LEFT, anchor=W)
15898 rsphmenu = Frame( frame2phar )
15899 rsphmenu.pack(side=TOP)
15900 rsphb2 = Button(rsphmenu, text=
"Stop", style=
"Stop.TButton", command=BStop)
15901 rsphb2.pack(side=RIGHT)
15902 rsphb3 = Button(rsphmenu, text=
"Run", style=
"Run.TButton", command=BStart)
15903 rsphb3.pack(side=RIGHT)
15905 PhAFFTwindmenu = Menubutton(frame2phar, text=
"FFTwindow", style=
"W11.TButton")
15906 PhAFFTwindmenu.menu = Menu(PhAFFTwindmenu, tearoff = 0 )
15907 PhAFFTwindmenu[
"menu"] = PhAFFTwindmenu.menu
15908 PhAFFTwindmenu.menu.add_radiobutton(label=
'Rectangular window (B=1)', variable=FFTwindow, value=0)
15909 PhAFFTwindmenu.menu.add_radiobutton(label=
'Cosine window (B=1.24)', variable=FFTwindow, value=1)
15910 PhAFFTwindmenu.menu.add_radiobutton(label=
'Triangular window (B=1.33)', variable=FFTwindow, value=2)
15911 PhAFFTwindmenu.menu.add_radiobutton(label=
'Hann window (B=1.5)', variable=FFTwindow, value=3)
15912 PhAFFTwindmenu.menu.add_radiobutton(label=
'Blackman window (B=1.73)', variable=FFTwindow, value=4)
15913 PhAFFTwindmenu.menu.add_radiobutton(label=
'Nuttall window (B=2.02)', variable=FFTwindow, value=5)
15914 PhAFFTwindmenu.menu.add_radiobutton(label=
'Flat top window (B=3.77)', variable=FFTwindow, value=6)
15915 PhAFFTwindmenu.pack(side=TOP)
15919 smphmenu = Frame( frame2phar )
15920 smphmenu.pack(side=TOP)
15921 smphb1 = Button(smphmenu, text=
"-Samples", style=
"W8.TButton", command=Bsamples1)
15922 smphb1.pack(side=LEFT)
15923 smphb2 = Button(smphmenu, text=
"+Samples", style=
"W8.TButton", command=Bsamples2)
15924 smphb2.pack(side=LEFT)
15926 refph = Frame( frame2phar )
15927 refph.pack(side=TOP)
15928 refphlab = Label(refph, text=
"Ref Phase")
15929 refphlab.pack(side=LEFT, anchor=W)
15930 RefphEntry = Spinbox(refph, width=5, cursor=
'double_arrow', values=RefPhase)
15931 RefphEntry.bind(
'<MouseWheel>', onSpinBoxScroll)
15932 RefphEntry.bind(
"<Button-4>", onSpinBoxScroll)
15933 RefphEntry.bind(
"<Button-5>", onSpinBoxScroll)
15934 RefphEntry.pack(side=LEFT, anchor=W)
15935 RefphEntry.delete(0,
"end")
15936 RefphEntry.insert(0,
"CA-V")
15937 vatb = Frame( frame2phar )
15938 vatb.pack(side=TOP)
15939 vatblab = Label(vatb, text=
"CA-V ")
15940 vatblab.pack(side=LEFT)
15941 vat_btn = Button(vatb, text=
"OFF", style=
"Stop.TButton", width=4, command=VAtoggle)
15942 vat_btn.pack(side=LEFT)
15943 vbtb = Frame( frame2phar )
15944 vbtb.pack(side=TOP)
15945 if MuxScreenStatus.get() == 0:
15947 vbtblab = Label(vbtb, text=
"CB-V ")
15948 vbtblab.pack(side=LEFT)
15949 vbt_btn = Button(vbtb, text=
"OFF", style=
"Stop.TButton", width=4, command=VBtoggle)
15950 vbt_btn.pack(side=LEFT)
15951 vabtb = Frame( frame2phar )
15952 vabtb.pack(side=TOP)
15953 vabtblab = Label(vabtb, text=
"CA-B V ")
15954 vabtblab.pack(side=LEFT)
15955 vabt_btn = Button(vabtb, text=
"OFF", style=
"Stop.TButton", width=4, command=VABtoggle)
15956 vabt_btn.pack(side=LEFT)
15960 amuxlab = Label(frame2phar, text=
"Analog Mux In")
15961 amuxlab.pack(side=TOP)
15962 phbt1 = Checkbutton(frame2phar, text=
'CB-A ', style=
"Strace2.TCheckbutton", variable=ShowPB_A)
15963 phbt1.pack(side=TOP)
15964 phbt2 = Checkbutton(frame2phar, text=
'CB-B ', style=
"Strace6.TCheckbutton", variable=ShowPB_B)
15965 phbt2.pack(side=TOP)
15966 phbt3 = Checkbutton(frame2phar, text=
'CB-C ', style=
"Strace7.TCheckbutton", variable=ShowPB_C)
15967 phbt3.pack(side=TOP)
15968 phbt4 = Checkbutton(frame2phar, text=
'CB-D ', style=
"Strace4.TCheckbutton", variable=ShowPB_D)
15969 phbt4.pack(side=TOP)
15972 vssb = Frame( frame2phar )
15973 vssb.pack(side=TOP)
15974 vslab = Label(vssb, text=
"Volts/div ")
15975 vslab.pack(side=LEFT)
15976 VScale = Spinbox(vssb, width=7, cursor=
'double_arrow', values=CHvpdiv)
15977 VScale.bind(
'<MouseWheel>', onSpinBoxScroll)
15978 VScale.bind(
"<Button-4>", onSpinBoxScroll)
15979 VScale.bind(
"<Button-5>", onSpinBoxScroll)
15980 VScale.pack(side=LEFT)
15981 VScale.delete(0,
"end")
15982 VScale.insert(0,0.5)
15984 iatb = Frame( frame2phar )
15985 iatb.pack(side=TOP)
15986 iatblab = Label(iatb, text=
"CA-I ")
15987 iatblab.pack(side=LEFT)
15988 iat_btn = Button(iatb, text=
"OFF", style=
"Stop.TButton", width=4, command=IAtoggle)
15989 iat_btn.pack(side=LEFT)
15990 ibtb = Frame( frame2phar )
15991 ibtb.pack(side=TOP)
15992 ibtblab = Label(ibtb, text=
"CB-I ")
15993 ibtblab.pack(side=LEFT)
15994 ibt_btn = Button(ibtb, text=
"OFF", style=
"Stop.TButton", width=4, command=IBtoggle)
15995 ibt_btn.pack(side=LEFT)
15997 issb = Frame( frame2phar )
15998 issb.pack(side=TOP)
15999 islab = Label(issb, text=
"mA/div ")
16000 islab.pack(side=LEFT)
16001 IScale = Spinbox(issb, width=7, cursor=
'double_arrow', values=CHipdiv)
16002 IScale.bind(
'<MouseWheel>', onSpinBoxScroll)
16003 IScale.bind(
"<Button-4>", onSpinBoxScroll)
16004 IScale.bind(
"<Button-5>", onSpinBoxScroll)
16005 IScale.pack(side=LEFT)
16006 IScale.delete(0,
"end")
16007 IScale.insert(0,10.0)
16009 dismiss1button = Button(frame2phar, text=
"Dismiss", style=
"W8.TButton", command=DestroyPhAScreen)
16010 dismiss1button.pack(side=TOP)
16012 ADI1 = Label(frame2phar, image=logo, anchor=
"sw", compound=
"top")
16013 ADI1.pack(side=TOP)
16017 global phawindow, PhAScreenStatus, PhAca, PhADisp
16019 PhAScreenStatus.set(0)
16022 phawindow.destroy()
16026 global PhAca, GRWPhA, XOLPhA, GRHPhA, Y0TPhA, CANVASwidthPhA, CANVASheightPhA, FontSize
16028 CANVASwidthPhA = event.width - 4
16029 CANVASheightPhA = event.height - 4
16030 GRWPhA = CANVASwidthPhA - (2 * X0LPhA) - int(21.25 * FontSize)
16031 GRHPhA = CANVASheightPhA - Y0TPhA - int(2.25 * FontSize)
16049 global VAresult, VBresult, IAresult, IBresult, VABresult, PhaseIA, PhaseIB, PhaseVA, PhaseVB, PhaseVAB
16050 global VMAresult, VMBresult, VMCresult, VMDresult, PhaseVMD, PhaseVMA, PhaseVMB, PhaseVMC
16051 global PeakVA, PeakVB, PeakIA, PeakIB, PeakVAB
16052 global PeakVMA, PeakVMB, PeakVMC, PeakVMD
16053 global PeakfreqVA, PeakfreqVB, PeakfreqIA, PeakfreqIB
16054 global PeakphaseVA, PeakphaseVB, PeakphaseIA, PeakphaseIB, PeakphaseVAB
16055 global PeakphaseVMA, PeakphaseVMB, PeakphaseVMC, PeakphaseVMD
16056 global PeakfreqVMA, PeakfreqVMB, PeakfreqVMC, PeakfreqVMD
16059 global AWGSAMPLErate, SAMPLErate, BaseSampleRate
16060 global STARTsample, STOPsample, LoopNum, FSweepMode
16061 global TRACEmode, Two_X_Sample, MuxScreenStatus, MuxChan, ChopMuxMode
16067 if len(VAresult) < 32:
16069 TRACEsize = len(VAresult)
16070 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
16073 STARTsample = int(math.ceil(STARTsample))
16074 if Two_X_Sample.get() == 0:
16075 STOPsample = 45000 / Fsample
16077 STOPsample = 90000 / Fsample
16078 STOPsample = int(math.floor(STOPsample))
16081 MAXsample = TRACEsize
16082 if STARTsample > (MAXsample - 1):
16083 STARTsample = MAXsample - 1
16085 if STOPsample > MAXsample:
16086 STOPsample = MAXsample
16089 PeakVA = PeakVB = PeakIA = PeakIB = PeakVAB = 0.0
16090 PeakfreqVA = PeakfreqVB = PeakfreqIA = PeakfreqIB = F = n * Fsample
16091 PeakphaseVA = PhaseVA[n]
16092 if MuxScreenStatus.get() == 0:
16093 PeakphaseVB = PhaseVB[n]
16095 PeakphaseVMA = PeakphaseVMB = PeakphaseVMC = PeakphaseVMD = 0.0
16096 PeakphaseIA = PhaseIA[n]
16097 PeakphaseIB = PhaseIB[n]
16098 PeakSampleVB = PeakSampleVA = PeakSampleIA = PeakSampleIB = n
16099 PeakSampleVMA = PeakSampleVMB = PeakSampleVMC = PeakSampleVMD = n
16100 if MuxChan == 0
or ChopMuxMode.get() > 0:
16102 PeakphaseVMA = PhaseVMA[n]
16104 PeakfreqVMA = PeakfreqVA
16105 if MuxChan == 1
or ChopMuxMode.get() > 0:
16107 PeakphaseVMB = PhaseVMB[n]
16109 PeakfreqVMB = PeakfreqVA
16110 if MuxChan == 2
or ChopMuxMode.get() > 0:
16112 PeakphaseVMC = PhaseVMC[n]
16114 PeakfreqVMC = PeakfreqVA
16115 if MuxChan == 3
or ChopMuxMode.get() > 0:
16117 PeakphaseVMD = PhaseVMD[n]
16119 PeakfreqVMD = PeakfreqVA
16121 while n <= STOPsample:
16124 VA = float(VAresult[n])
16130 PeakphaseVA = PhaseVA[n]
16133 if MuxScreenStatus.get() == 0:
16135 VAB = float(VABresult[n])
16141 PeakphaseVAB = PhaseVAB[n]
16145 VB = float(VBresult[n])
16151 PeakphaseVB = PhaseVB[n]
16154 if MuxChan == 0
or ChopMuxMode.get() > 0:
16156 VMA = float(VMAresult[n])
16162 PeakphaseVMA = PhaseVMA[n]
16164 if MuxChan == 1
or ChopMuxMode.get() > 0:
16166 VMB = float(VMBresult[n])
16172 PeakphaseVMB = PhaseVMB[n]
16174 if MuxChan == 2
or ChopMuxMode.get() > 0:
16176 VMC = float(VMCresult[n])
16182 PeakphaseVMC = PhaseVMC[n]
16184 if MuxChan == 3
or ChopMuxMode.get() > 0:
16186 VMD = float(VMDresult[n])
16192 PeakphaseVMD = PhaseVMD[n]
16195 IA = float(IAresult[n])
16201 PeakphaseIA = PhaseIA[n]
16205 IB = float(IBresult[n])
16211 PeakphaseIB = PhaseIB[n]
16216 if PeakSampleVA != PeakSampleIA:
16217 PeakphaseIA = PhaseIA[PeakSampleVA]
16218 PeakIA = IAresult[PeakSampleVA]
16219 if PeakSampleVB != PeakSampleIB
and MuxScreenStatus.get() == 0:
16220 PeakphaseIB = PhaseIB[PeakSampleVB]
16221 PeakIB = IBresult[PeakSampleVB]
16222 if MuxScreenStatus.get() > 0:
16223 if PeakSampleVA != PeakSampleVMA:
16225 PeakphaseVMA = PhaseVMA[PeakSampleVA]
16226 PeakVMA = float(VMAresult[PeakSampleVA])
16229 if PeakSampleVA != PeakSampleVMB:
16231 PeakphaseVMB = PhaseVMB[PeakSampleVA]
16232 PeakVMB = float(VMBresult[PeakSampleVA])
16235 if PeakSampleVA != PeakSampleVMC:
16237 PeakphaseVMC = PhaseVMC[PeakSampleVA]
16238 PeakVMC = float(VMCresult[PeakSampleVA])
16241 if PeakSampleVA != PeakSampleVMD:
16243 PeakphaseVMD = PhaseVMD[PeakSampleVA]
16244 PeakVMD = float(VMDresult[PeakSampleVA])
16250 global PeakVA, PeakVB, PeakIA, PeakIB
16251 global PeakfreqVA, PeakfreqVB, PeakfreqIA, PeakfreqIB
16252 global PeakphaseVA, PeakphaseVB, PeakphaseIA, PeakphaseIB
16253 global PeakVMA, PeakVMB, PeakVMC, PeakVMD
16254 global PeakphaseVMA, PeakphaseVMB, PeakphaseVMC, PeakphaseVMD
16255 global PeakfreqVMA, PeakfreqVMB, PeakfreqVMC, PeakfreqVMD
16256 global CAVphase, CBVphase, CAIphase, CBIphase, CABVphase
16257 global CMAphase, CMBphase, CMCphase, CMDphase
16258 global CANVASheightPhA, CANVASwidthPhA, PhAca, TRACEwidth, GridWidth
16259 global COLORsignalband, COLORtext, COLORgrid
16260 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5, COLORtrace6, COLORtrace7
16261 global FFTwindow, FFTbandwidth, ZEROstuffing, FFTwindowname
16266 global FontSize, MuxScreenStatus, MuxChan, Mulx, ChopMuxMode
16268 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, OverRangeFlagA, OverRangeFlagB
16270 global TRACEaverage
16271 global FreqTraceMode
16272 global Vdiv, VScale, IScale
16273 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn
16274 global AWGBMode, AWGBIOMode, ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D
16275 global ShowC1_V, ShowC2_V, ShowC1_I, ShowC2_I, CHA_RC_HP, CHB_RC_HP
16276 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2, CHAHW, CHALW, CHADCy, CHAperiod, CHAfreq
16277 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2, CHBHW, CHBLW, CHBDCy, CHBperiod, CHBfreq
16278 global InOffA, InGainA, InOffB, InGainB
16279 global CurOffA, CurOffB, CurGainA, CurGainB
16281 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
16282 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
16283 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
16284 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
16285 global SV1, SI1, SV2, SI2, CHABphase, SVA_B
16286 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1
16287 global MeasDCI1, MeasMinI1, MeasMaxI1, MeasMidI1, MeasPPI1
16288 global MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2, MeasPPV2
16289 global MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2
16290 global MeasRMSV1, MeasRMSI1, MeasRMSV2, MeasRMSI2, MeasPhase, MeasRMSVA_B
16291 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ
16292 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
16300 ycenter = (GRHPhA/2) + 14
16301 Radius = (GRWPhA-X0LPhA)/(1 + Vdiv.get()*2)
16302 VoltsperPixel = float(VScale.get())/Radius
16303 mAperPixel = float(IScale.get())/Radius
16304 TRadius = Radius * Vdiv.get()
16306 x2 = X0LPhA + GRWPhA
16307 xright = 10 + xcenter + ( Vdiv.get() * Radius )
16308 while (i <= Vdiv.get()):
16309 x0 = xcenter - ( i * Radius )
16310 x1 = xcenter + ( i * Radius )
16311 y0 = ycenter - ( i * Radius )
16312 y1 = ycenter + ( i * Radius )
16313 VTxt =
'{0:.2f}'.format(float(VScale.get()) * i)
16314 ITxt =
'{0:.2f}'.format(float(IScale.get()) * i)
16315 TOffset = xright+(4*FontSize)
16316 PhAca.create_oval( x0, y0, x1, y1, outline=COLORgrid, width=GridWidth.get())
16317 PhAca.create_line(xcenter, y0, xright, y0, fill=COLORgrid, width=GridWidth.get(), dash=(4,3))
16318 PhAca.create_text(xright, y0, text=str(VTxt), fill=COLORtrace1, anchor=
"w", font=(
"arial", FontSize+2 ))
16319 if iat_btn.config(
'text')[-1] ==
'ON' or ibt_btn.config(
'text')[-1] ==
'ON':
16320 PhAca.create_text(TOffset, y0, text=str(ITxt), fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize+2 ))
16323 PhAca.create_line(xcenter, y0, xcenter, y1, fill=COLORgrid, width=GridWidth.get())
16324 PhAca.create_line(x0, ycenter, x1, ycenter, fill=COLORgrid, width=GridWidth.get())
16325 RAngle = math.radians(45)
16326 y = TRadius*math.sin(RAngle)
16327 x = TRadius*math.cos(RAngle)
16328 PhAca.create_line(xcenter-x, ycenter-y, xcenter+x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
16329 PhAca.create_line(xcenter+x, ycenter-y, xcenter-x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
16330 PhAca.create_text(x0, ycenter, text=
"180", fill=COLORgrid, anchor=
"e", font=(
"arial", FontSize+2 ))
16331 PhAca.create_text(x1, ycenter, text=
"0.0", fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
16332 PhAca.create_text(xcenter, y0, text=
"90", fill=COLORgrid, anchor=
"s", font=(
"arial", FontSize+2 ))
16333 PhAca.create_text(xcenter, y1, text=
"-90", fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize+2 ))
16336 if Two_X_Sample.get() == 0:
16337 if AWGBMode.get() == 2
or AWGBIOMode.get() > 0:
16338 PhErr = 0.001675 * PeakfreqVA
16355 if ChopMuxMode.get() > 0:
16356 PhErrMB = 0.0072 * PeakfreqVMB
16357 PhErrMA = 0.0016 * PeakfreqVMA
16358 PhErrMD = 0.0054 * PeakfreqVMD
16359 PhErrMC = 0.0016 * PeakfreqVMC
16362 if RefphEntry.get() ==
"CA-V":
16364 CBVphase = PeakphaseVA - PeakphaseVB + PhErr
16365 CAIphase = PeakphaseVA - PeakphaseIA
16366 CBIphase = PeakphaseVA - PeakphaseIB + PhErr
16367 CABVphase = PeakphaseVA - PeakphaseVAB
16368 elif RefphEntry.get() ==
"CB-V":
16370 CAVphase = PeakphaseVB - PeakphaseVA - PhErr
16371 CAIphase = PeakphaseVB - PeakphaseIA - PhErr
16372 CBIphase = PeakphaseVB - PeakphaseIB
16373 CABVphase = PeakphaseVB - PeakphaseVAB
16374 elif RefphEntry.get() ==
"CA-I":
16376 CAVphase = PeakphaseIA - PeakphaseVA
16377 CBVphase = PeakphaseIA - PeakphaseVB + PhErr
16378 CBIphase = PeakphaseIA - PeakphaseIB + PhErr
16379 CABVphase = PeakphaseIA - PeakphaseVAB
16380 elif RefphEntry.get() ==
"CB-I":
16382 CAVphase = PeakphaseIB - PeakphaseVA - PhErr
16383 CBVphase = PeakphaseIB - PeakphaseVB
16384 CAIphase = PeakphaseIB - PeakphaseIA - PhErr
16385 CABVphase = PeakphaseIB - PeakphaseVAB
16387 if MuxScreenStatus.get() > 0:
16389 if RefphEntry.get() ==
"CA-V":
16391 CMAphase = PeakphaseVA - PeakphaseVMA + PhErr
16392 CMBphase = PeakphaseVA - PeakphaseVMB + PhErr
16393 CMCphase = PeakphaseVA - PeakphaseVMC + PhErr
16394 CMDphase = PeakphaseVA - PeakphaseVMD + PhErr
16395 CAIphase = PeakphaseVA - PeakphaseIA
16396 CBIphase = PeakphaseVA - PeakphaseIB + PhErr
16397 elif RefphEntry.get() ==
"CB-A":
16399 CAVphase = PeakphaseVMA - PeakphaseVA + PhErr
16400 CMBphase = PeakphaseVMA - PeakphaseVMB - PhErrMB
16401 CMCphase = PeakphaseVMA - PeakphaseVMC + PhErrMC
16402 CMDphase = PeakphaseVMA - PeakphaseVMD - PhErrMD
16403 CAIphase = PeakphaseVMA - PeakphaseIA
16404 CBIphase = PeakphaseVMA - PeakphaseIB + PhErr
16405 elif RefphEntry.get() ==
"CB-B":
16407 CAVphase = PeakphaseVMB - PeakphaseVA + PhErr
16408 CMAphase = PeakphaseVMB - PeakphaseVMA + PhErrMD
16409 CMCphase = PeakphaseVMB - PeakphaseVMC + PhErrMB
16410 CMDphase = PeakphaseVMB - PeakphaseVMD + PhErrMC
16411 CAIphase = PeakphaseVMB - PeakphaseIA
16412 CBIphase = PeakphaseVMB - PeakphaseIB + PhErr
16413 elif RefphEntry.get() ==
"CB-C":
16415 CAVphase = PeakphaseVMC - PeakphaseVA + PhErr
16416 CMAphase = PeakphaseVMC - PeakphaseVMA + PhErrMC
16417 CMBphase = PeakphaseVMC - PeakphaseVMB - PhErrMB
16418 CMDphase = PeakphaseVMC - PeakphaseVMD - PhErrMD
16419 CAIphase = PeakphaseVMC - PeakphaseIA
16420 CBIphase = PeakphaseVMC - PeakphaseIB + PhErr
16421 elif RefphEntry.get() ==
"CB-D":
16423 CAVphase = PeakphaseVMD - PeakphaseVA + PhErr
16424 CMAphase = PeakphaseVMD - PeakphaseVMA + PhErrMD
16425 CMBphase = PeakphaseVMD - PeakphaseVMB + PhErrMC
16426 CMCphase = PeakphaseVMD - PeakphaseVMC + PhErrMD
16427 CAIphase = PeakphaseVMD - PeakphaseIA
16428 CBIphase = PeakphaseVMD - PeakphaseIB + PhErr
16431 CAVphase = CAVphase - 360
16432 elif CAVphase < -180:
16433 CAVphase = CAVphase + 360
16435 CBVphase = CBVphase - 360
16436 elif CBVphase < -180:
16437 CBVphase = CBVphase + 360
16439 CAIphase = CAIphase - 360
16440 elif CAIphase < -180:
16441 CAIphase = CAIphase + 360
16443 CBIphase = CBIphase - 360
16444 elif CBIphase < -180:
16445 CBIphase = CBIphase + 360
16447 if vat_btn.config(
'text')[-1] ==
'ON':
16448 MagRadius = PeakVA / VoltsperPixel
16449 y1 = ycenter - MagRadius*math.sin(math.radians(CAVphase))
16453 y1 = ycenter - xright
16454 x1 = xcenter + MagRadius*math.cos(math.radians(CAVphase))
16458 x1 = xcenter - xright
16459 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace1, arrow=
"last", width=TRACEwidth.get())
16460 if MuxScreenStatus.get() == 0:
16461 if vbt_btn.config(
'text')[-1] ==
'ON':
16462 MagRadius = PeakVB / VoltsperPixel
16463 y1 = ycenter - MagRadius*math.sin(math.radians(CBVphase))
16467 y1 = ycenter - xright
16468 x1 = xcenter + MagRadius*math.cos(math.radians(CBVphase))
16472 x1 = xcenter - xright
16473 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace2, arrow=
"last", width=TRACEwidth.get())
16475 if ShowPB_A.get() > 0:
16477 CMAphase = CMAphase - 360
16478 elif CMAphase < -180:
16479 CMAphase = CMAphase + 360
16480 MagRadius = PeakVMA / VoltsperPixel
16481 y1 = ycenter - MagRadius*math.sin(math.radians(CMAphase))
16485 y1 = ycenter - xright
16486 x1 = xcenter + MagRadius*math.cos(math.radians(CMAphase))
16490 x1 = xcenter - xright
16491 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace2, arrow=
"last", width=TRACEwidth.get())
16492 if ShowPB_B.get() > 0:
16494 CMBphase = CMBphase - 360
16495 elif CMBphase < -180:
16496 CMBphase = CMBphase + 360
16497 MagRadius = PeakVMB / VoltsperPixel
16498 y1 = ycenter - MagRadius*math.sin(math.radians(CMBphase))
16502 y1 = ycenter - xright
16503 x1 = xcenter + MagRadius*math.cos(math.radians(CMBphase))
16507 x1 = xcenter - xright
16508 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace6, arrow=
"last", width=TRACEwidth.get())
16509 if ShowPB_C.get() > 0:
16511 CMCphase = CMCphase - 360
16512 elif CMCphase < -180:
16513 CMCphase = CMCphase + 360
16514 MagRadius = PeakVMC / VoltsperPixel
16515 y1 = ycenter - MagRadius*math.sin(math.radians(CMCphase))
16519 y1 = ycenter - xright
16520 x1 = xcenter + MagRadius*math.cos(math.radians(CMCphase))
16524 x1 = xcenter - xright
16525 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace7, arrow=
"last", width=TRACEwidth.get())
16526 if ShowPB_D.get() > 0:
16528 CMDphase = CMDphase - 360
16529 elif CMDphase < -180:
16530 CMDphase = CMDphase + 360
16531 MagRadius = PeakVMD / VoltsperPixel
16532 y1 = ycenter - MagRadius*math.sin(math.radians(CMDphase))
16536 y1 = ycenter - xright
16537 x1 = xcenter + MagRadius*math.cos(math.radians(CMDphase))
16541 x1 = xcenter - xright
16542 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace4, arrow=
"last", width=TRACEwidth.get())
16543 if iat_btn.config(
'text')[-1] ==
'ON':
16544 MagRadius = PeakIA / mAperPixel
16545 y1 = ycenter - MagRadius*math.sin(math.radians(CAIphase))
16549 y1 = ycenter - xright
16550 x1 = xcenter + MagRadius*math.cos(math.radians(CAIphase))
16554 x1 = xcenter - xright
16555 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace3, arrow=
"last", width=TRACEwidth.get())
16556 if ibt_btn.config(
'text')[-1] ==
'ON':
16557 MagRadius = PeakIB / mAperPixel
16558 y1 = ycenter - MagRadius*math.sin(math.radians(CBIphase))
16562 y1 = ycenter - xright
16563 x1 = xcenter + MagRadius*math.cos(math.radians(CBIphase))
16567 x1 = xcenter - xright
16568 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace4, arrow=
"last", width=TRACEwidth.get())
16569 if MuxScreenStatus.get() == 0:
16570 if vabt_btn.config(
'text')[-1] ==
'ON':
16571 MagRadius = PeakVAB / VoltsperPixel
16573 y1 = ycenter - MagRadius*math.sin(math.radians(CABVphase))
16577 y1 = ycenter - xright
16578 x1 = xcenter + MagRadius*math.cos(math.radians(CABVphase))
16582 x1 = xcenter - xright
16583 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace5, arrow=
"last", width=TRACEwidth.get())
16585 if OverRangeFlagA == 1:
16586 x = X0LPhA+GRWPhA+10
16587 y = Y0TPhA+GRHPhA-40
16588 PhAca.create_rectangle(x-6, y-6, x+6, y+6, fill=
"#ff0000")
16589 PhAca.create_text (x+12, y, text=
"CHA Over Range", anchor=W, fill=
"#ff0000", font=(
"arial", FontSize+4 ))
16590 if OverRangeFlagB == 1:
16591 x = X0LPhA+GRWPhA+10
16592 y = Y0TPhA+GRHPhA-10
16593 PhAca.create_rectangle(x-6, y-6, x+6, y+6, fill=
"#ff0000")
16594 PhAca.create_text (x+12, y, text=
"CHB Over Range", anchor=W, fill=
"#ff0000", font=(
"arial", FontSize+4 ))
16596 txt =
" Sample rate: " + str(SAMPLErate)
16597 txt = txt +
" FFT samples: " + str(SMPfft)
16598 txt = txt +
" " + FFTwindowname
16602 idTXT = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
16604 x = X0LPhA + GRWPhA + 4
16606 if ChopMuxMode.get() == 0:
16607 txt =
"CA " +
' {0:.3f} '.format(PeakVA) +
" RMS V"
16608 TXT9 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace1, font=(
"arial", FontSize+4 ))
16610 if MuxScreenStatus.get() == 0:
16611 txt =
"CB " +
' {0:.3f} '.format(PeakVB) +
" RMS V"
16612 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace2, font=(
"arial", FontSize+4 ))
16615 if ShowPB_A.get() > 0:
16616 txt =
"Mux A " +
' {0:.3f} '.format(PeakVMA) +
" RMS V"
16617 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace2, font=(
"arial", FontSize+4 ))
16619 if ShowPB_B.get() > 0:
16620 txt =
"Mux B " +
' {0:.3f} '.format(PeakVMB) +
" RMS V"
16621 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace6, font=(
"arial", FontSize+4 ))
16623 if ShowPB_C.get() > 0:
16624 txt =
"Mux C " +
' {0:.3f} '.format(PeakVMC) +
" RMS V"
16625 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace7, font=(
"arial", FontSize+4 ))
16627 if ShowPB_D.get() > 0:
16628 txt =
"Mux D " +
' {0:.3f} '.format(PeakVMD) +
" RMS V"
16629 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace4, font=(
"arial", FontSize+4 ))
16631 if iat_btn.config(
'text')[-1] ==
'ON':
16632 txt =
"CA " +
' {0:.2f} '.format(PeakIA) +
" RMS mA"
16633 TXT11 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace3, font=(
"arial", FontSize+4 ))
16635 if ibt_btn.config(
'text')[-1] ==
'ON':
16636 txt =
"CB " +
' {0:.2f} '.format(PeakIB) +
" RMS mA"
16637 TXT12 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace4, font=(
"arial", FontSize+4 ))
16639 if ChopMuxMode.get() == 0:
16640 txt =
"CA V Phase " +
' {0:.1f} '.format(CAVphase) +
" Degrees"
16641 TXT13 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace1, font=(
"arial", FontSize+4 ))
16643 if MuxScreenStatus.get() == 0:
16644 txt =
"CB V Phase " +
' {0:.1f} '.format(CBVphase) +
" Degrees"
16645 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace2, font=(
"arial", FontSize+4 ))
16648 if ShowPB_A.get() > 0:
16649 txt =
"Mux A Phase " +
' {0:.1f} '.format(CMAphase) +
" Degrees"
16650 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace2, font=(
"arial", FontSize+4 ))
16652 if ShowPB_B.get() > 0:
16653 txt =
"Mux B Phase " +
' {0:.1f} '.format(CMBphase) +
" Degrees"
16654 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace6, font=(
"arial", FontSize+4 ))
16656 if ShowPB_C.get() > 0:
16657 txt =
"Mux C Phase " +
' {0:.1f} '.format(CMCphase) +
" Degrees"
16658 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace7, font=(
"arial", FontSize+4 ))
16660 if ShowPB_D.get() > 0:
16661 txt =
"Mux D Phase " +
' {0:.1f} '.format(CMDphase) +
" Degrees"
16662 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace4, font=(
"arial", FontSize+4 ))
16664 if iat_btn.config(
'text')[-1] ==
'ON':
16665 txt =
"CA I Phase " +
' {0:.1f} '.format(CAIphase) +
" Degrees"
16666 TXT15 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace3, font=(
"arial", FontSize+4 ))
16668 if ibt_btn.config(
'text')[-1] ==
'ON':
16669 txt =
"CB I Phase " +
' {0:.1f} '.format(CBIphase) +
" Degrees"
16670 TXT16 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace4, font=(
"arial", FontSize+4 ))
16673 if ChopMuxMode.get() == 0:
16674 txt =
"CA-V Freq " +
' {0:.1f} '.format(PeakfreqVA) +
" Hertz"
16675 TXT17 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
16678 txt =
"Mux A Freq " +
' {0:.1f} '.format(PeakfreqVMA) +
" Hertz"
16679 TXT17 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
16684 if ShowC1_V.get() == 1
or ShowC2_V.get() == 1:
16685 if ETSDisp.get() > 0:
16686 FindRisingEdge(VBuffA[:int(DISsamples)],VBuffB[:int(DISsamples)])
16689 if ShowC1_V.get() == 1:
16690 if MeasAHW.get() == 1:
16691 txt = txt +
" CA Hi Width = " +
' {0:.3f} '.format(CHAHW/Mulx) +
" mS "
16692 if MeasALW.get() == 1:
16693 txt = txt +
" CA Lo Width = " +
' {0:.3f} '.format(CHALW/Mulx) +
" mS "
16694 if MeasADCy.get() == 1:
16695 txt = txt +
" CA DutyCycle = " +
' {0:.1f} '.format(CHADCy) +
" % "
16696 if MeasAPER.get() == 1:
16697 txt = txt +
" CA Period = " +
' {0:.3f} '.format(CHAperiod/Mulx) +
" mS "
16698 if MeasAFREQ.get() == 1:
16699 txt = txt +
" CA Freq = "
16700 ChaF = float(CHAfreq*Mulx)
16702 V1String =
' {0:.2f} '.format(ChaF)
16703 txt = txt + str(V1String) +
" Hz "
16704 if ChaF > 1000
and ChaF < 1000000:
16705 V1String =
' {0:.2f} '.format(ChaF/1000)
16706 txt = txt + str(V1String) +
" KHz "
16708 V1String =
' {0:.2f} '.format(ChaF/1000000)
16709 txt = txt + str(V1String) +
" MHz "
16711 if ShowC2_V.get() == 1:
16712 if MeasBHW.get() == 1:
16713 txt = txt +
" CB Hi Width = " +
' {0:.3f} '.format(CHBHW/Mulx) +
" mS "
16714 if MeasBLW.get() == 1:
16715 txt = txt +
" CB Lo Width = " +
' {0:.3f} '.format(CHBLW/Mulx) +
" mS "
16716 if MeasBDCy.get() == 1:
16717 txt = txt +
" CB DutyCycle = " +
' {0:.1f} '.format(CHBDCy) +
" % "
16718 if MeasBPER.get() == 1:
16719 txt = txt +
" CB Period = " +
' {0:.3f} '.format(CHBperiod/Mulx) +
" mS "
16720 if MeasBFREQ.get() == 1:
16721 txt = txt +
" CB Freq = "
16722 ChaF = float(CHBfreq*Mulx)
16724 V1String =
' {0:.2f} '.format(ChaF)
16725 txt = txt + str(V1String) +
" Hz "
16726 if ChaF > 1000
and ChaF < 1000000:
16727 V1String =
' {0:.2f} '.format(ChaF/1000)
16728 txt = txt + str(V1String) +
" KHz "
16730 V1String =
' {0:.2f} '.format(ChaF/1000000)
16731 txt = txt + str(V1String) +
" MHz "
16733 if MuxScreenStatus.get() == 0:
16734 if MeasPhase.get() == 1:
16735 txt = txt +
" CA-B Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
16736 if MeasDelay.get() == 1:
16737 txt = txt +
" CB-A Delay = " +
' {0:.3f} '.format(CHBADelayR1) +
" mS "
16740 y = YBot + int(2.5 *FontSize)
16741 TXT18 = PhAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
16743 if ShowC1_V.get() == 1:
16745 if CHA_RC_HP.get() == 1:
16749 if MeasDCV1.get() == 1:
16750 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV1)
16751 if MeasMaxV1.get() == 1:
16752 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV1)
16753 if MeasTopV1.get() == 1:
16754 txt = txt +
" Top = " +
' {0:.4f} '.format(VATop)
16755 if MeasMinV1.get() == 1:
16756 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV1)
16757 if MeasBaseV1.get() == 1:
16758 txt = txt +
" Base = " +
' {0:.4f} '.format(VABase)
16759 if MeasMidV1.get() == 1:
16760 MidV1 = (MaxV1+MinV1)/2.0
16761 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV1)
16762 if MeasPPV1.get() == 1:
16764 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV1)
16765 if MeasRMSV1.get() == 1:
16766 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV1)
16767 if MeasRMSVA_B.get() == 1:
16768 txt = txt +
" A-B RMS = " +
' {0:.4f} '.format(SVA_B)
16769 if MeasDiffAB.get() == 1:
16770 txt = txt +
" CA-CB = " +
' {0:.4f} '.format(DCV1-DCV2)
16771 if MeasUserA.get() == 1:
16773 TempValue = eval(UserAString)
16774 V1String =
' {0:.4f} '.format(TempValue)
16777 txt = txt + UserALabel +
" = " + V1String
16778 if (ShowC1_I.get() == 1
and ShowC1_V.get() == 0):
16780 elif (ShowC1_I.get() == 1
and ShowC1_V.get() == 1):
16781 txt = txt +
"CHA: "
16783 if ShowC1_I.get() == 1:
16784 if MeasDCI1.get() == 1:
16785 V1String =
' {0:.2f} '.format(DCI1)
16786 txt = txt +
" AvgI = " + V1String
16787 if AWGAShape.get() == 0:
16789 Resvalue = (DCV1/DCI1)*1000
16790 txt = txt +
" Res = " +
' {0:.1f} '.format(Resvalue)
16792 txt = txt +
" Res = OverRange"
16793 if MeasMaxI1.get() == 1:
16794 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI1)
16795 if MeasMinI1.get() == 1:
16796 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI1)
16797 if MeasMidI1.get() == 1:
16798 MidI1 = (MaxI1+MinI1)/2.0
16799 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI1)
16800 if MeasPPI1.get() == 1:
16802 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI1)
16803 if MeasRMSI1.get() == 1:
16804 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI1)
16807 y = YBot + int(4*FontSize)
16808 TXT19 = PhAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
16811 if MuxScreenStatus.get() == 1:
16813 if Show_CBA.get() > 0:
16815 elif Show_CBB.get() > 0:
16817 elif Show_CBC.get() > 0:
16819 elif Show_CBD.get() > 0:
16821 if MeasPhase.get() == 1:
16822 txt = txt +
" CA-Mux Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
16823 if MeasDelay.get() == 1:
16824 txt = txt +
" Mux-CA Delay = " +
' {0:.3f} '.format(CHBADelayR1) +
" mS "
16825 if MeasUserB.get() == 1:
16827 TempValue = eval(UserBString)
16828 V1String =
' {0:.4f} '.format(TempValue)
16831 txt = txt + UserBLabel +
" = " + V1String
16832 if ShowC2_V.get() == 1:
16833 if CHB_RC_HP.get() == 1:
16837 if MeasDCV2.get() == 1:
16838 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV2)
16839 if MeasMaxV2.get() == 1:
16840 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV2)
16841 if MeasTopV2.get() == 1:
16842 txt = txt +
" Top = " +
' {0:.4f} '.format(VBTop)
16843 if MeasMinV2.get() == 1:
16844 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV2)
16845 if MeasBaseV2.get() == 1:
16846 txt = txt +
" Base = " +
' {0:.4f} '.format(VBBase)
16847 if MeasMidV2.get() == 1:
16848 MidV2 = (MaxV2+MinV2)/2.0
16849 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV2)
16850 if MeasPPV2.get() == 1:
16852 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV2)
16853 if MeasRMSV2.get() == 1:
16854 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV2)
16855 if MeasDiffBA.get() == 1:
16856 txt = txt +
" CB-CA = " +
' {0:.4f} '.format(DCV2-DCV1)
16857 if MeasUserB.get() == 1:
16859 TempValue = eval(UserBString)
16860 V1String =
' {0:.4f} '.format(TempValue)
16863 txt = txt + UserBLabel +
" = " + V1String
16864 if (ShowC2_I.get() == 1
and ShowC2_V.get() == 0):
16866 elif (ShowC2_I.get() == 1
and ShowC2_V.get() == 1):
16867 txt = txt +
"CHB: "
16868 if ShowC2_I.get() == 1:
16869 if MeasDCI2.get() == 1:
16870 V1String =
' {0:.2f} '.format(DCI2)
16871 txt = txt +
" AvgI = " + V1String
16872 if AWGBShape.get() == 0:
16874 Resvalue = (DCV2/DCI2)*1000
16875 R1String =
' {0:.1f} '.format(Resvalue)
16876 txt = txt +
" Res = " + R1String
16878 txt = txt +
" Res = OverRange"
16879 if MeasMaxI2.get() == 1:
16880 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI2)
16881 if MeasMinI2.get() == 1:
16882 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI2)
16883 if MeasMidI2.get() == 1:
16884 MidI2 = (MaxI2+MinI2)/2.0
16885 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI2)
16886 if MeasPPI2.get() == 1:
16888 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI2)
16889 if MeasRMSI2.get() == 1:
16890 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI2)
16893 y = YBot + int(5.5 *FontSize)
16894 TXT20 = PhAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
16897 global PeakVA, PeakVB, PeakIA, PeakIB
16898 global PeakfreqVA, PeakfreqVB, PeakfreqIA, PeakfreqIB
16899 global PeakVMA, PeakVMB, PeakVMC, PeakVMD
16900 global CAVphase, CBVphase, CAIphase, CBIphase, CABVphase
16901 global CMAphase, CMBphase, CMCphase, CMDphase
16902 global MuxScreenStatus, AppendPhAData, PhADatafilename
16903 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn
16904 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D
16907 if AppendPhAData.get() == 0:
16908 PhADatafilename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"Comma Separated Values",
"*.csv")])
16909 DataFile = open(PhADatafilename,
'a')
16910 DataFile.write(
'Amplitude, Phase, @ ' + str(PeakfreqVA) +
' Hertz\n')
16912 if vat_btn.config(
'text')[-1] ==
'ON':
16913 DataFile.write( str(PeakVA) +
', ' + str(CAVphase) +
', CA-V\n')
16914 if MuxScreenStatus.get() == 0:
16915 if vbt_btn.config(
'text')[-1] ==
'ON':
16916 DataFile.write( str(PeakVB) +
', ' + str(CBVphase) +
', CB-V\n')
16918 if ShowPB_A.get() > 0:
16919 DataFile.write( str(PeakVMA) +
', ' + str(CMAphase) +
', Mux A\n')
16920 if ShowPB_B.get() > 0:
16921 DataFile.write( str(PeakVMB) +
', ' + str(CMBphase) +
', Mux B\n')
16922 if ShowPB_C.get() > 0:
16923 DataFile.write( str(PeakVMC) +
', ' + str(CMCphase) +
', Mux C\n')
16924 if ShowPB_D.get() > 0:
16925 DataFile.write( str(PeakVMD) +
', ' + str(CMDphase) +
', Mux D\n')
16926 if iat_btn.config(
'text')[-1] ==
'ON':
16927 DataFile.write( str(PeakIA) +
', ' + str(CAIphase) +
', CA-I\n')
16928 if ibt_btn.config(
'text')[-1] ==
'ON':
16929 DataFile.write( str(PeakIB) +
', ' + str(CBIphase) +
', CB-I\n')
16933 global CANVASheightPhA, CANVASwidthPhA, PhAca, TRACEwidth, GridWidth, PhAPlotMode
16934 global COLORsignalband, COLORtext, COLORgrid, SmoothCurves
16935 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5, COLORtrace6, COLORtrace7
16936 global GRWPhA, GRHPhA, X0LPhA, Vdiv, VScale, IScale
16938 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"Comma Separated Values",
"*.csv")])
16941 ycenter = (GRHPhA/2) + 14
16942 Radius = (GRWPhA-X0LPhA)/(1 + Vdiv.get()*2)
16943 VoltsperPixel = float(VScale.get())/Radius
16944 mAperPixel = float(IScale.get())/Radius
16945 TRadius = Radius * Vdiv.get()
16947 x2 = X0LPhA + GRWPhA
16951 CSVFile = open(filename)
16952 dialect = csv.Sniffer().sniff(CSVFile.read(2048))
16954 csv_f = csv.reader(CSVFile, dialect)
16957 PeakMag = float(row[0])
16958 PeakPhase = float(row[1])
16959 if row[2] ==
"CA-I" or row[2] ==
"CB-I":
16960 MagRadius = PeakMag / mAperPixel
16962 MagRadius = PeakMag / VoltsperPixel
16964 y1 = ycenter - MagRadius*math.sin(math.radians(PeakPhase))
16968 y1 = ycenter - xright
16969 x1 = xcenter + MagRadius*math.cos(math.radians(PeakPhase))
16973 x1 = xcenter - xright
16974 if PhAPlotMode.get() == 0:
16975 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace5, arrow=
"last", width=TRACEwidth.get())
16977 PhATrace.append(x1)
16978 PhATrace.append(y1)
16980 print(
'skipping non-numeric row')
16981 if PhAPlotMode.get() == 1:
16982 PhAca.create_line(PhATrace, fill=COLORtrace5, smooth=SmoothCurves.get(), splinestep=5, width=TRACEwidth.get())
16985 showwarning(
"WARNING",
"No such file found or wrong format!")
16989 global FFTmemoryA, FFTresultA, SMPfft
16990 global FFTmemoryB, FFTresultB
16991 global PhaseA, PhaseB, freqwindow
16992 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, ShowC1_VdB, ShowC2_VdB
16995 if ShowC1_VdB.get() == 1:
16996 TRACEsize = len(FFTresultA)
16997 elif ShowC2_VdB.get() == 1:
16998 TRACEsize = len(FFTresultB)
17002 dB = askyesno(
"Mag or dB: ",
"Save amplidude data as dB (Yes) or Mag (No):\n", parent=freqwindow)
17005 PSD = askyesno(
"Mag/Root Hz? ",
"Save Mag in V/sqrt Hz? (yes) or (No):\n", parent=freqwindow)
17006 tme = strftime(
"%Y%b%d-%H%M%S", gmtime())
17007 filename =
"Spectrum-" + tme
17008 filename = filename +
".csv"
17010 filename = asksaveasfilename(initialfile = filename, defaultextension =
".csv",
17011 filetypes=[(
"Comma Separated Values",
"*.csv")], parent=freqwindow)
17012 DataFile = open(filename,
'a')
17013 HeaderString =
'Frequency-#, '
17014 if ShowC1_VdB.get() == 1:
17016 HeaderString = HeaderString +
'CA-dB, '
17018 HeaderString = HeaderString +
'CA-Mag, '
17019 if ShowC2_VdB.get() == 1:
17021 HeaderString = HeaderString +
'CB-dB, '
17023 HeaderString = HeaderString +
'CB-Mag, '
17024 if ShowC1_P.get() == 1:
17025 HeaderString = HeaderString +
'Phase A-B, '
17026 if ShowC2_P.get() == 1:
17027 HeaderString = HeaderString +
'Phase B-A, '
17028 HeaderString = HeaderString +
'\n'
17029 DataFile.write( HeaderString )
17031 FBinWidth = float(SAMPLErate / 2.0) / (TRACEsize - 1)
17034 while n < TRACEsize:
17037 if ShowC1_VdB.get() == 1:
17038 V = 10 * math.log10(float(FFTresultA[n]))
17042 V = V/math.sqrt(FBinWidth)
17043 txt = txt +
"," + str(V)
17044 if ShowC2_VdB.get() == 1:
17045 V = 10 * math.log10(float(FFTresultB[n]))
17049 V = V/math.sqrt(FBinWidth)
17050 txt = txt +
"," + str(V)
17051 if ShowC1_P.get() == 1:
17052 RelPhase = PhaseA[n]-PhaseB[n]
17054 RelPhase = RelPhase - 360
17055 elif RelPhase < -180:
17056 RelPhase = RelPhase + 360
17057 txt = txt +
"," + str(RelPhase)
17058 if ShowC2_P.get() == 1:
17059 RelPhase = PhaseB[n]-PhaseA[n]
17061 RelPhase = RelPhase - 360
17062 elif RelPhase < -180:
17063 RelPhase = RelPhase + 360
17064 txt = txt +
"," + str(RelPhase)
17066 DataFile.write(txt)
17073 global CANVASheightF, CANVASwidthF, SmoothCurvesSA
17074 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
17075 global PeakxM, PeakyM, PeakMdb, PeakfreqM
17076 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
17077 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
17078 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM, PeakIndexA, PeakIndexB, Fsample
17080 global COLORsignalband, COLORtext
17081 global COLORtrace1, COLORtrace2
17082 global FSweepMode, LoopNum, MarkerFreqNum, TRACEwidth, GridWidth
17086 global FFTwindow, FFTbandwidth, ZEROstuffing, FFTwindowname
17093 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, SingleShotSA, HScale, HarmonicMarkers
17095 global SAVScale, SAVPSD, SAvertmaxEntry, SAvertminEntry, SAvertmax, SAvertmin
17096 global StartFreqEntry, StopFreqEntry, PhCenFreqEntry, RelPhaseCenter
17097 global ShowC1_P, ShowC2_P, ShowRA_VdB, ShowRB_VdB, ShowMarker
17098 global ShowRA_P, ShowRB_P, ShowMathSA, FreqDisp, ShowAWGASA, ShowAWGBSA
17099 global ShowFCur, ShowdBCur, FCursor, dBCursor
17100 global T1Fline, T2Fline, T1Pline, T1FRline, T2FRline, TFMline, TFRMline
17101 global T1PRline, T2PRline, TAFline, TBFline
17102 global TRACEaverage
17103 global FreqTraceMode
17108 FBinWidth = float(SAMPLErate / 2.0) / (SMPfft - 1)
17111 StartFrequency = float(StartFreqEntry.get())
17113 StartFreqEntry.delete(0,
"end")
17114 StartFreqEntry.insert(0,100)
17115 StartFrequency = 100
17117 StopFrequency = float(StopFreqEntry.get())
17119 StopFreqEntry.delete(0,
"end")
17120 StopFreqEntry.insert(0,10000)
17121 StopFrequency = 10000
17123 Phasecenter = int(PhCenFreqEntry.get())
17124 RelPhaseCenter.set(Phasecenter)
17126 PhCenFreqEntry.delete(0,
"end")
17127 PhCenFreqEntry.insert(0,0)
17128 RelPhaseCenter.set(0)
17134 if SAVScale.get() == 0:
17135 while (i <= Vdiv.get()):
17136 y = Y0TF + i * GRHF/Vdiv.get()
17137 Dline = [x1,y,x2,y]
17138 if i == 0
or i == Vdiv.get():
17139 Freqca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
17141 Freqca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
17142 Vaxis_value = (DBlevel.get() - (i * DBdivlist[DBdivindex.get()]))
17143 Vaxis_label = str(Vaxis_value)
17144 Freqca.create_text(x1-3, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
17145 if ShowC1_P.get() == 1
or ShowC2_P.get() == 1:
17146 Vaxis_value = ( 180 - ( i * (360 / Vdiv.get())))
17147 Vaxis_value = Vaxis_value + Phasecenter
17148 Vaxis_label = str(Vaxis_value)
17149 Freqca.create_text(x2+3, y, text=Vaxis_label, fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize ))
17152 if SAVScale.get() == 2:
17154 LogVStop = math.log10(SAvertmax)
17158 LogVStart = math.log10(SAvertmin)
17161 LogVpixel = (LogVStart - LogVStop) / GRHF
17162 NumDec = LogVStart - LogVStop
17163 Gridpixel = GRHF/NumDec
17167 LogV = math.log10(10**V)
17168 y = Y0TF + (LogV/LogVpixel)
17171 Dline = [x1,y,x2,y]
17172 Freqca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
17173 LNum = LogVStop + V
17175 axis_label =
"10.0"
17179 axis_label =
"100mV"
17181 axis_label =
"10mV"
17185 axis_label =
"100uV"
17187 axis_label =
"10uV"
17191 axis_label =
"100nV"
17193 axis_label =
"10nV"
17195 axis_label = str(LogVStart+V)
17197 Freqca.create_text(x1-3, y, text=axis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
17200 ym = y + (Gridpixel*math.log10(J))
17201 Dline = [x1,ym,x2,ym]
17202 Freqca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
17207 Vper = (SAvertmax - SAvertmin) / Vdiv.get()
17208 while (i < Vdiv.get()+1):
17209 y = Y0TF + i * GRHF/Vdiv.get()
17210 Dline = [x1,y,x2,y]
17211 if i == 0
or i == Vdiv.get():
17212 Freqca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
17214 Freqca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
17215 axis_value = (SAvertmax - (i * Vper))
17216 axis_label =
' {0:.3f} '.format(axis_value)
17217 Freqca.create_text(x1-3, y, text=axis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
17223 if HScale.get() == 1:
17225 LogFStop = math.log10(StopFrequency)
17227 LogFStart = math.log10(StartFrequency)
17230 LogFpixel = (LogFStop - LogFStart) / GRWF
17232 while F <= StopFrequency:
17233 if F >= StartFrequency:
17235 LogF = math.log10(F)
17236 x = X0LF + (LogF - LogFStart)/LogFpixel
17239 Dline = [x,y1,x,y2]
17240 if F == 1
or F == 10
or F == 100
or F == 1000
or F == 10000
or F == 100000:
17241 Freqca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
17242 axis_label = str(F)
17243 Freqca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
17245 Freqca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
17262 Freqdiv = (StopFrequency - StartFrequency) / 10
17264 x = X0LF + i * GRWF/10.0
17265 Dline = [x,y1,x,y2]
17266 if i == 0
or i == 10:
17267 Freqca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
17269 Freqca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
17270 axis_value = (StartFrequency + (i * Freqdiv))
17271 axis_label = str(axis_value)
17272 Freqca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
17275 Yconv = float(GRHF) / (Vdiv.get() * DBdivlist[DBdivindex.get()])
17276 Yc = float(Y0TF) + Yconv * (DBlevel.get())
17278 YVconv = float(GRHF) / (SAvertmax - SAvertmin)
17279 YVc = float(Y0TF) + YVconv * SAvertmax
17280 Fpixel = (StopFrequency - StartFrequency) / GRWF
17281 if ShowFCur.get() > 0:
17282 Dline = [FCursor, Y0TF, FCursor, Y0TF+GRHF]
17283 Freqca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
17285 if HScale.get() == 1:
17286 LogFStop = math.log10(StopFrequency)
17288 LogFStart = math.log10(StartFrequency)
17291 LogFpixel = (LogFStop - LogFStart) / GRWF
17292 xfreq = 10**(((FCursor-X0LF)*LogFpixel) + LogFStart)
17294 Fpixel = (StopFrequency - StartFrequency) / GRWF
17295 xfreq = ((FCursor-X0LF)*Fpixel)+StartFrequency
17296 XFString =
' {0:.2f} '.format(xfreq)
17297 V_label = XFString +
" Hz"
17298 Freqca.create_text(FCursor+1, Y0TF+GRHF+6, text=V_label, fill=COLORtext, anchor=
"n", font=(
"arial", FontSize ))
17301 if ShowdBCur.get() > 0:
17302 Dline = [X0LF, dBCursor, X0LF+GRWF, dBCursor]
17303 Freqca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
17304 if SAVScale.get() == 0:
17305 yvdB = ((Yc-dBCursor)/Yconv)
17306 VdBString =
' {0:.1f} '.format(yvdB)
17307 V_label = VdBString +
" dBV"
17308 elif SAVScale.get() == 1:
17309 yvdB = ((YVc-dBCursor)/YVconv)
17310 VdBString =
' {0:.3f} '.format(yvdB)
17311 V_label = VdBString +
" Vrms"
17313 LogVpixel = (LogVStop - LogVStart) / GRHF
17314 Vlog = ((YVc - dBCursor) * LogVpixel) + LogVStart
17316 VdBString =
' {:.2e} '.format(yvdB)
17317 V_label = VdBString +
" Vrms"
17319 Freqca.create_text(X0LF+GRWF-5, dBCursor, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
17321 SmoothBool = SmoothCurvesSA.get()
17323 if len(T1Fline) > 4:
17325 if OverRangeFlagA == 1:
17326 Freqca.create_line(T1Fline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17328 Freqca.create_line(T1Fline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17329 if ShowMarker.get() > 0:
17331 while k <= HarmonicMarkers.get():
17332 FreqA = k*PeakIndexA*Fsample
17334 if SAVScale.get() == 0:
17335 if SAVPSD.get() == 1:
17337 dbA = 10 * math.log10(float(FFTresultA[PeakIndexA*k])/math.sqrt(FBinWidth))
17342 dbA = 10 * math.log10(float(FFTresultA[PeakIndexA*k]))
17345 if ShowMarker.get() == 2
and k > 1:
17346 Peak_label =
' {0:.2f} '.format(dbA - PeakdbA) +
',' +
' {0:.1f} '.format(FreqA - PeakfreqA)
17348 Peak_label =
' {0:.2f} '.format(dbA) +
',' +
' {0:.1f} '.format(FreqA)
17349 yA = Yc - Yconv * dbA
17352 dbA = 10 * math.log10(float(FFTresultA[PeakIndexA*k]))
17355 V = 10.0**(dbA/20.0)
17356 PeakV = 10.0**(PeakdbA/20.0)
17357 if SAVPSD.get() == 1:
17358 V = V/math.sqrt(FBinWidth)
17359 PeakV = PeakV/math.sqrt(FBinWidth)
17360 if SAVScale.get() == 2:
17361 LogVpixel = (LogVStop - LogVStart) / GRHF
17363 LogV = math.log10(V)
17364 yA = YVc - (LogV - LogVStart)/LogVpixel
17366 yA = YVc - YVconv * V
17367 if ShowMarker.get() == 2
and k > 1:
17368 Peak_label =
' {0:.2e} '.format(V - PeakV) +
',' +
' {0:.1f} '.format(FreqA - PeakfreqA)
17370 Peak_label =
' {0:.2e} '.format(V) +
',' +
' {0:.1f} '.format(FreqA)
17372 if ShowMarker.get() == 2
and k > 1:
17373 Peak_label =
' {0:.2f} '.format(V - PeakV) +
',' +
' {0:.1f} '.format(FreqA - PeakfreqA)
17375 Peak_label =
' {0:.2f} '.format(V) +
',' +
' {0:.1f} '.format(FreqA)
17376 yA = YVc - YVconv * V
17378 if HScale.get() == 1:
17380 LogF = math.log10(FreqA)
17381 xA = X0LF + int((LogF - LogFStart)/LogFpixel)
17385 xA = X0LF+int((FreqA - StartFrequency)/Fpixel)
17387 Freqca.create_text(xA, yA, text=Peak_label, fill=COLORtrace1, anchor=
"s", font=(
"arial", FontSize ))
17390 if len(T2Fline) > 4:
17392 if OverRangeFlagB == 1:
17393 Freqca.create_line(T2Fline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17395 Freqca.create_line(T2Fline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17396 if ShowMarker.get() > 0:
17398 while k <= HarmonicMarkers.get():
17399 FreqB = k*PeakIndexB*Fsample
17401 if SAVScale.get() == 0:
17402 if SAVPSD.get() == 1:
17404 dbB = 10 * math.log10(float(FFTresultB[PeakIndexB*k])/math.sqrt(FBinWidth))
17409 dbB = 10 * math.log10(float(FFTresultB[PeakIndexB*k]))
17412 if ShowMarker.get() == 2
and k > 1:
17413 Peak_label =
' {0:.2f} '.format(dbB - PeakdbB) +
',' +
' {0:.1f} '.format(FreqB - PeakfreqB)
17415 Peak_label =
' {0:.2f} '.format(dbB) +
',' +
' {0:.1f} '.format(FreqB)
17416 yB = Yc - Yconv * dbB
17419 dbB = 10 * math.log10(float(FFTresultB[PeakIndexB*k]))
17422 V = 10.0**(dbB/20.0)
17423 PeakV = 10.0**(PeakdbB/20.0)
17424 if SAVPSD.get() == 1:
17425 V = V/math.sqrt(FBinWidth)
17426 PeakV = PeakV/math.sqrt(FBinWidth)
17427 if SAVScale.get() == 2:
17428 LogVpixel = (LogVStop - LogVStart) / GRHF
17430 LogV = math.log10(V)
17431 yB = YVc - (LogV - LogVStart)/LogVpixel
17433 yB = YVc - YVconv * V
17434 if ShowMarker.get() == 2
and k > 1:
17435 Peak_label =
' {0:.2e} '.format(V - PeakV) +
',' +
' {0:.1f} '.format(FreqB - PeakfreqB)
17437 Peak_label =
' {0:.2e} '.format(V) +
',' +
' {0:.1f} '.format(FreqB)
17439 if ShowMarker.get() == 2
and k > 1:
17440 Peak_label =
' {0:.2f} '.format(V - PeakV) +
',' +
' {0:.1f} '.format(FreqB - PeakfreqB)
17442 Peak_label =
' {0:.2f} '.format(V) +
',' +
' {0:.1f} '.format(FreqB)
17443 yB = YVc - YVconv * V
17445 if HScale.get() == 1:
17447 LogF = math.log10(FreqB)
17448 xB = X0LF + int((LogF - LogFStart)/LogFpixel)
17452 xB = X0LF+int((FreqB - StartFrequency)/Fpixel)
17454 Freqca.create_text(xB, yB, text=Peak_label, fill=COLORtrace2, anchor=
"s", font=(
"arial", FontSize ))
17457 if len(T1Pline) > 4:
17459 Freqca.create_line(T1Pline, fill=COLORtrace3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17460 if len(T2Pline) > 4:
17462 Freqca.create_line(T2Pline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17463 if ShowAWGASA.get() > 0
and len(TAFline) > 4:
17464 Freqca.create_line(TAFline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17465 if ShowAWGBSA.get() > 0
and len(TBFline) > 4:
17466 Freqca.create_line(TBFline, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17467 if ShowRA_VdB.get() == 1
and len(T1FRline) > 4:
17468 Freqca.create_line(T1FRline, fill=COLORtraceR1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17469 if ShowMarker.get() == 1:
17470 Peak_label =
' {0:.2f} '.format(PeakdbRA) +
',' +
' {0:.1f} '.format(PeakfreqRA)
17471 Freqca.create_text(PeakxRA, PeakyRA, text=Peak_label, fill=COLORtraceR1, anchor=
"s", font=(
"arial", FontSize ))
17472 if ShowRB_VdB.get() == 1
and len(T2FRline) > 4:
17473 Freqca.create_line(T2FRline, fill=COLORtraceR2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17474 if ShowMarker.get() == 1:
17475 Peak_label =
' {0:.2f} '.format(PeakdbRB) +
',' +
' {0:.1f} '.format(PeakfreqRB)
17476 Freqca.create_text(PeakxRB, PeakyRB, text=Peak_label, fill=COLORtraceR2, anchor=
"s", font=(
"arial", FontSize ))
17477 if ShowRA_P.get() == 1
and len(T1PRline) > 4:
17478 Freqca.create_line(T1PRline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17479 if ShowRB_P.get() == 1
and len(T2PRline) > 4:
17480 Freqca.create_line(T2PRline, fill=COLORtraceR4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17481 if ShowMathSA.get() > 0
and len(TFMline) > 4:
17482 Freqca.create_line(TFMline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17483 if ShowMarker.get() ==1:
17484 Peak_label =
' {0:.2f} '.format(PeakMdb) +
',' +
' {0:.1f} '.format(PeakfreqM)
17485 Freqca.create_text(PeakxM, PeakyM, text=Peak_label, fill=COLORtrace5, anchor=
"s", font=(
"arial", FontSize ))
17486 if ShowRMath.get() == 1
and len(TFRMline) > 4:
17487 Freqca.create_line(TFRMline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17488 if ShowMarker.get() ==1:
17489 Peak_label =
' {0:.2f} '.format(PeakRMdb) +
',' +
' {0:.1f} '.format(PeakfreqRM)
17490 Freqca.create_text(PeakxRM, PeakyRM, text=Peak_label, fill=COLORtraceR5, anchor=
"s", font=(
"arial", FontSize ))
17493 txt =
" Sample rate: " + str(SAMPLErate)
17494 txt = txt +
" FFT samples: " + str(SMPfft)
17496 txt = txt +
" " + FFTwindowname
17500 idTXT = Freqca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
17503 txt = str(StartFrequency) +
" to " + str(StopFrequency) +
" Hz"
17504 txt = txt +
" " + str(DBdivlist[DBdivindex.get()]) +
" dB/div"
17505 txt = txt +
" Level: " + str(DBlevel.get()) +
" dB "
17506 if FFTwindow.get() < 7:
17507 txt = txt +
" FFT Bandwidth =" +
' {0:.2f} '.format(FFTbandwidth)
17509 txt = txt +
" FFT Bandwidth = ???"
17513 idTXT = Freqca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
17515 if FreqTraceMode.get() == 1:
17516 txt =
"Normal mode "
17518 if FreqTraceMode.get() == 2:
17519 txt =
"Peak hold mode "
17521 if FreqTraceMode.get() == 3:
17522 txt =
"Power average mode (" + str(TRACEaverage.get()) +
") "
17524 if ZEROstuffing.get() > 0:
17525 txt = txt +
"Zero Stuffing = " + str(ZEROstuffing.get())
17527 if (RUNstatus.get() == 0)
and (SingleShotSA.get() == 0):
17528 txt = txt +
" Stopped "
17529 elif SingleShotSA.get() == 1:
17530 txt = txt +
" Single Shot Trace "
17532 if FreqDisp.get() == 1:
17533 txt = txt +
" Running "
17535 txt = txt +
" Display off "
17538 IDtxt = Freqca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
17541 global SMPfft, FFTwindow
17542 global SMPfftpwrTwo, BodeDisp
17543 global TRACEresetFreq, FreqTraceMode, LoopNum, FSweepMode, FSweepCont
17546 if BodeDisp.get() == 0:
17547 if FFTwindow.get() != 8:
17548 SMPfft = 2 ** int(SMPfftpwrTwo.get())
17551 if FreqTraceMode.get() == 1
and TRACEresetFreq ==
False:
17552 TRACEresetFreq =
True
17553 if FreqTraceMode.get() == 2
and LoopNum.get() == 1
and FSweepMode.get() > 0
and FSweepCont.get() == 0
and BodeDisp.get() >0:
17554 TRACEresetFreq =
True
17557 global FFTbandwidth
17559 global FFTwindowname
17560 global FFTwindowshape
17561 global AWGSAMPLErate, SAMPLErate, BaseSampleRate
17563 global LastWindow, LastSMPfft
17565 if LastWindow == FFTwindow.get()
and LastSMPfft == SMPfft:
17569 FFTwindowname =
"No such window"
17572 if FFTwindow.get() == 0:
17573 FFTwindowname =
" Rectangular (no) window (B=1) "
17576 if FFTwindow.get() == 1:
17577 FFTwindowname =
" Cosine window (B=1.24) "
17580 if FFTwindow.get() == 2:
17581 FFTwindowname =
" Triangular window (B=1.33) "
17584 if FFTwindow.get() == 3:
17585 FFTwindowname =
" Hann window (B=1.5) "
17588 if FFTwindow.get() == 4:
17589 FFTwindowname =
" Blackman window (B=1.73) "
17592 if FFTwindow.get() == 5:
17593 FFTwindowname =
" Nuttall window (B=2.02) "
17596 if FFTwindow.get() == 6:
17597 FFTwindowname =
" Flat top window (B=3.77) "
17600 if FFTwindow.get() == 7:
17601 FFTwindowname = FFTUserWindowString
17604 FFTwindowshape = eval(FFTUserWindowString)
17606 FFTwindowshape = numpy.ones(SMPfft)
17607 print(
"Filling FFT window with Ones")
17608 elif FFTwindow.get() == 8:
17609 FFTwindowname =
"Window Shape From file"
17612 FFTbandwidth = int(FFTbw * (SAMPLErate/2.0) / float(SMPfft))
17614 FFTwindowshape = numpy.ones(SMPfft)
17618 if FFTwindow.get() == 1:
17619 w = math.sin(math.pi * n / (SMPfft - 1))
17620 FFTwindowshape[n] = w * 1.571
17622 if FFTwindow.get() == 2:
17623 w = (2.0 / SMPfft) * ((SMPfft/ 2.0) - abs(n - (SMPfft - 1) / 2.0))
17624 FFTwindowshape[n] = w * 2.0
17626 if FFTwindow.get() == 3:
17627 w = 0.5 - 0.5 * math.cos(2 * math.pi * n / (SMPfft - 1))
17628 FFTwindowshape[n] = w * 2.000
17630 if FFTwindow.get() == 4:
17631 w = 0.42 - 0.5 * math.cos(2 * math.pi * n / (SMPfft - 1)) + 0.08 * math.cos(4 * math.pi * n / (SMPfft - 1))
17632 FFTwindowshape[n] = w * 2.381
17634 if FFTwindow.get() == 5:
17635 w = 0.355768 - 0.487396 * math.cos(2 * math.pi * n / (SMPfft - 1)) + 0.144232 * math.cos(4 * math.pi * n / (SMPfft - 1))- 0.012604 * math.cos(6 * math.pi * n / (SMPfft - 1))
17636 FFTwindowshape[n] = w * 2.811
17638 if FFTwindow.get() == 6:
17639 w = 1.0 - 1.93 * math.cos(2 * math.pi * n / (SMPfft - 1)) + 1.29 * math.cos(4 * math.pi * n / (SMPfft - 1))- 0.388 * math.cos(6 * math.pi * n / (SMPfft - 1)) + 0.032 * math.cos(8 * math.pi * n / (SMPfft - 1))
17640 FFTwindowshape[n] = w * 1.000
17642 LastWindow = FFTwindow.get()
17643 LastSMPfft = SMPfft
17646 global FFTUserWindowString, freqwindow
17648 TempString = FFTUserWindowString
17649 FFTUserWindowString = askstring(
"User FFT Window",
"Current User Window: " + FFTUserWindowString +
"\n\nNew Window:\n", initialvalue=FFTUserWindowString, parent=freqwindow)
17650 if (FFTUserWindowString ==
None):
17651 FFTUserWindowString = TempString
17654 global FFTwindowshape, SMPfft, LastSMPfft, FFTwindow, LastWindow
17657 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=freqwindow)
17659 CSVFile = open(filename)
17660 csv_f = csv.reader(CSVFile)
17661 FFTwindowshape = []
17664 FFTwindowshape.append(float(row[0]))
17666 print(
'skipping non-numeric row')
17667 FFTwindowshape = numpy.array(FFTwindowshape)
17669 SMPfft = len(FFTwindowshape)
17670 LastSMPfft = SMPfft
17671 LastWindow = FFTwindow.get()
17674 showwarning(
"WARNING",
"No such file found or wrong format!")
17677 global ShowFCur, ShowdBCur, FCursor, dBCursor, RUNstatus, Freqca
17681 if RUNstatus.get() == 0:
17683 Freqca.bind(
'<MouseWheel>', onCanvasFreqClickScroll)
17684 Freqca.bind(
"<Button-4>", onCanvasFreqClickScroll)
17685 Freqca.bind(
"<Button-5>", onCanvasFreqClickScroll)
17688 global ShowFCur, ShowdBCur, FCursor, dBCursor, RUNstatus, Freqca
17690 if event.widget == Freqca:
17691 ShiftKeyDwn = event.state & 1
17692 if ShowFCur.get() > 0
and ShiftKeyDwn == 0:
17694 if event.num == 5
or event.delta == -120:
17696 if event.num == 4
or event.delta == 120:
17698 elif ShowdBCur.get() > 0
or ShiftKeyDwn == 1:
17700 if event.num == 5
or event.delta == -120:
17702 if event.num == 4
or event.delta == 120:
17704 if RUNstatus.get() == 0:
17713 global Freqca, MarkerLoc, SAMPLErate, BaseSampleRate
17714 global COLORgrid, COLORtext, HScale, ShowC1_VdB, ShowC2_VdB
17715 global COLORtrace1, COLORtrace2, StartFreqEntry, StopFreqEntry
17716 global AWGSAMPLErate, RUNstatus, COLORtext, MarkerFreqNum, PrevdBV, PrevF
17717 global SAVScale, SAVPSD, SAvertmaxEntry, SAvertminEntry, SAvertmax, SAvertmin
17719 if (RUNstatus.get() == 0):
17720 MarkerFreqNum = MarkerFreqNum + 1
17721 COLORmarker = COLORgrid
17722 if ShowC1_VdB.get() == 1:
17723 COLORmarker = COLORtrace1
17724 elif ShowC2_VdB.get() == 1:
17725 COLORmarker = COLORtrace2
17727 StartFrequency = float(StartFreqEntry.get())
17729 StartFreqEntry.delete(0,
"end")
17730 StartFreqEntry.insert(0,100)
17731 StartFrequency = 100
17733 StopFrequency = float(StopFreqEntry.get())
17735 StopFreqEntry.delete(0,
"end")
17736 StopFreqEntry.insert(0,100)
17737 StopFrequency = 100
17739 Freqca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORmarker)
17740 Freqca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORmarker)
17741 Freqca.create_text(event.x+4, event.y, text=str(MarkerFreqNum), fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
17743 Yconv = float(GRHF) / (Vdiv.get() * DBdivlist[DBdivindex.get()])
17744 YVconv = float(GRHF) / (SAvertmax - SAvertmin)
17745 Yc = float(Y0TF) + Yconv * (DBlevel.get())
17746 YVc = float(Y0TF) + YVconv * SAvertmax
17747 Yphconv = float(GRHF) / 360
17748 Yp = float(Y0TF) + Yphconv + 180
17750 if HScale.get() == 1:
17751 LogFStop = math.log10(StopFrequency)
17753 LogFStart = math.log10(StartFrequency)
17756 LogFpixel = (LogFStop - LogFStart) / GRWF
17757 xfreq = 10**(((event.x-X0LF)*LogFpixel) + LogFStart)
17759 Fpixel = (StopFrequency - StartFrequency) / GRWF
17760 xfreq = ((event.x-X0LF)*Fpixel)+StartFrequency
17763 LogVStop = math.log10(SAvertmax)
17767 LogVStart = math.log10(SAvertmin)
17770 LogVpixel = (LogVStop - LogVStart) / GRHF
17772 XFString =
' {0:.2f} '.format(xfreq)
17773 if SAVScale.get() == 0:
17774 yvdB = ((Yc-event.y)/Yconv)
17775 VdBString =
' {0:.3f} '.format(yvdB)
17776 V_label = str(MarkerFreqNum) +
" " + XFString +
" Hz, " + VdBString +
" dBV"
17778 if SAVScale.get() == 1:
17779 yvdB = ((YVc-event.y)/YVconv)
17780 VdBString =
' {0:.3f} '.format(yvdB)
17782 Vlog = ((YVc - event.y) * LogVpixel) + LogVStart
17784 VdBString =
' {:.2e} '.format(yvdB)
17785 V_label = str(MarkerFreqNum) +
" " + XFString +
" Hz, " + VdBString +
" Vrms"
17787 if MarkerFreqNum > 1:
17788 DeltaV =
' {0:.3f} '.format(yvdB-PrevdBV)
17789 DeltaF =
' {0:.2f} '.format(xfreq-PrevF)
17790 if SAVScale.get() == 0:
17791 DeltaV =
' {0:.3f} '.format(yvdB-PrevdBV)
17792 V_label = V_label +
" Delta " + DeltaF +
" Hz, " + DeltaV +
" dBV"
17794 if SAVScale.get() == 1:
17795 DeltaV =
' {0:.3f} '.format(yvdB-PrevdBV)
17797 DeltaV =
' {0:.2e} '.format(yvdB-PrevdBV)
17798 V_label = V_label +
" Delta " + DeltaF +
" Hz, " + DeltaV +
" Vrms"
17800 y = Y0TF + 3 + (MarkerFreqNum*10)
17802 if MarkerLoc ==
'UR' or MarkerLoc ==
'ur':
17803 x = X0LF + GRWF - 5
17804 y = Y0TF + 3 + (MarkerFreqNum*10)
17806 if MarkerLoc ==
'LL' or MarkerLoc ==
'll':
17808 y = Y0TF + GRHF + 3 - (MarkerFreqNum*10)
17810 if MarkerLoc ==
'LR' or MarkerLoc ==
'lr':
17811 x = X0LF + GRWF - 5
17812 y = Y0TF + GRHF + 3 - (MarkerFreqNum*10)
17814 Freqca.create_text(x, y, text=V_label, fill=COLORmarker, anchor=Justify, font=(
"arial", FontSize ))
17820 if ShowC1_VdB.get() == 0:
17827 if ShowC2_VdB.get() == 0:
17834 if ShowC1_P.get() == 0:
17841 if ShowC2_P.get() == 0:
17848 if ShowMarker.get() == 0:
17855 if ShowRA_VdB.get() == 0:
17862 if ShowRB_VdB.get() == 0:
17896 if ShowFCur.get() == 0:
17903 if ShowdBCur.get() == 1:
17910 if ShowdBCur.get() == 2:
17916 global ShowBPCur, ShowBdBCur, BPCursor, BdBCursor, RUNstatus, Bodeca
17919 BdBCursor = event.y
17920 if RUNstatus.get() == 0:
17923 Bodeca.bind(
'<MouseWheel>', onCanvasBodeClickScroll)
17924 Bodeca.bind(
"<Button-4>", onCanvasBodeClickScroll)
17925 Bodeca.bind(
"<Button-5>", onCanvasBodeClickScroll)
17928 global ShowBPCur, ShowBdBCur, BPCursor, BdBCursor, RUNstatus
17931 shift_key = event.state & 1
17932 if ShowBPCur.get() > 0
and shift_key == 0:
17934 if event.num == 5
or event.delta == -120:
17936 if event.num == 4
or event.delta == 120:
17938 elif ShowBdBCur.get() > 0
or shift_key == 1:
17940 if event.num == 5
or event.delta == -120:
17942 if event.num == 4
or event.delta == 120:
17944 if RUNstatus.get() == 0:
17953 global Bodeca, MarkerLoc, SAMPLErate
17954 global COLORgrid, COLORtext, HScaleBP, ShowCA_VdB, ShowCB_VdB, DBdivindexBP
17955 global COLORtrace1, COLORtrace2, COLORtrace6, StartBodeEntry, StopBodeEntry, DBlevelBP
17956 global AWGSAMPLErate, RUNstatus, COLORtext, MarkerFreqNum, PrevdBV, PrevF, Vdiv
17958 if (RUNstatus.get() == 0):
17959 MarkerFreqNum = MarkerFreqNum + 1
17960 COLORmarker = COLORtrace6
17961 if ShowCA_VdB.get() == 1:
17962 COLORmarker = COLORtrace1
17963 elif ShowCB_VdB.get() == 1:
17964 COLORmarker = COLORtrace2
17966 EndFreq = float(StopBodeEntry.get())
17968 StopBodeEntry.delete(0,
"end")
17969 StopBodeEntry.insert(0,10000)
17972 BeginFreq = float(StartBodeEntry.get())
17974 StartBodeEntry.delete(0,
"end")
17975 StartBodeEntry.insert(0,100)
17978 Bodeca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORmarker)
17979 Bodeca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORmarker)
17980 Bodeca.create_text(event.x+4, event.y, text=str(MarkerFreqNum), fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
17982 Yconv = float(GRHBP) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
17983 Yc = float(Y0TBP) + Yconv * (DBlevelBP.get())
17984 Yphconv = float(GRHBP) / 360
17985 Yp = float(Y0TBP) + Yphconv + 180
17989 if HScaleBP.get() == 1:
17990 LogFStop = math.log10(EndFreq)
17992 LogFStart = math.log10(BeginFreq)
17995 LogFpixel = (LogFStop - LogFStart) / GRWBP
17996 xfreq = 10**(((event.x-x1)*LogFpixel) + LogFStart)
17998 Fpixel = (EndFreq - BeginFreq) / GRWBP
17999 xfreq = ((event.x-x1)*Fpixel)+BeginFreq
18001 yvdB = ((Yc-event.y)/Yconv)
18002 VdBString =
' {0:.1f} '.format(yvdB)
18003 XFString =
' {0:.2f} '.format(xfreq)
18004 V_label = str(MarkerFreqNum) +
" " + XFString +
" Hz, " + VdBString +
" dBV"
18005 if MarkerFreqNum > 1:
18006 DeltaV =
' {0:.3f} '.format(yvdB-PrevdBV)
18007 DeltaF =
' {0:.2f} '.format(xfreq-PrevF)
18008 V_label = V_label +
" Delta " + DeltaF +
" Hz, " + DeltaV +
" dBV"
18010 y = Y0TBP + 3 + (MarkerFreqNum*10)
18012 if MarkerLoc ==
'UR' or MarkerLoc ==
'ur':
18014 y = Y0TBP + 3 + (MarkerFreqNum*10)
18016 if MarkerLoc ==
'LL' or MarkerLoc ==
'll':
18018 y = Y0TBP + GRHBP + 3 - (MarkerFreqNum*10)
18020 if MarkerLoc ==
'LR' or MarkerLoc ==
'lr':
18022 y = Y0TBP + GRHBP + 3 - (MarkerFreqNum*10)
18024 Bodeca.create_text(x, y, text=V_label, fill=COLORmarker, anchor=Justify, font=(
"arial", FontSize ))
18030 if ShowCA_VdB.get() == 0:
18037 if ShowCB_VdB.get() == 0:
18044 if ShowCA_P.get() == 0:
18051 if ShowCB_P.get() == 0:
18057 global ShowMarkerBP
18058 if ShowMarkerBP.get() == 0:
18059 ShowMarkerBP.set(1)
18061 ShowMarkerBP.set(0)
18065 if ShowRA_VdB.get() == 0:
18072 if ShowRB_VdB.get() == 0:
18094 if ShowBPCur.get() == 0:
18101 if ShowBdBCur.get() == 1:
18108 if ShowBdBCur.get() == 2:
18130 button = event.widget
18131 cursor_position = button.index(INSERT)
18132 Pos = cursor_position
18133 OldVal = button.get()
18134 OldValfl = float(OldVal)
18137 Dot = OldVal.find (
".")
18138 Decimals = Len - Dot - 1
18141 Step = 10**(Len - Pos)
18143 Step = 10**(Dot - Pos)
18145 Step = 10**(Dot - Pos + 1)
18147 if event.num == 5
or event.delta == -120:
18148 NewVal = OldValfl - Step
18149 if event.num == 4
or event.delta == 120:
18150 NewVal = OldValfl + Step
18151 FormatStr =
"{0:." + str(Decimals) +
"f}"
18152 NewStr = FormatStr.format(NewVal)
18153 NewDot = NewStr.find (
".")
18154 NewPos = Pos + NewDot - Dot
18156 NewLen = len(NewStr)
18157 NewPos = Pos + NewLen - Len
18158 button.delete(0, END)
18159 button.insert(0, NewStr)
18160 button.icursor(NewPos)
18180 button = event.widget
18181 cursor_position = button.index(INSERT)
18182 Pos = cursor_position
18183 OldVal = button.get()
18184 OldValfl = float(OldVal)
18186 Dot = OldVal.find (
".")
18187 Decimals = Len - Dot - 1
18190 Step = 10**(Len - Pos)
18192 Step = 10**(Dot - Pos)
18194 Step = 10**(Dot - Pos + 1)
18195 if platform.system() ==
"Windows":
18196 if event.keycode == 38:
18197 NewVal = OldValfl + Step
18198 elif event.keycode == 40:
18199 NewVal = OldValfl - Step
18202 elif platform.system() ==
"Linux":
18203 if event.keycode == 111:
18204 NewVal = OldValfl + Step
18205 elif event.keycode == 116:
18206 NewVal = OldValfl - Step
18209 elif platform.system() ==
"Darwin":
18210 if event.keycode == 0x7D:
18211 NewVal = OldValfl + Step
18212 elif event.keycode == 0x7E:
18213 NewVal = OldValfl - Step
18219 FormatStr =
"{0:." + str(Decimals) +
"f}"
18220 NewStr = FormatStr.format(NewVal)
18221 NewDot = NewStr.find (
".")
18222 NewPos = Pos + NewDot - Dot
18224 NewLen = len(NewStr)
18225 NewPos = Pos + NewLen - Len
18226 button.delete(0, END)
18227 button.insert(0, NewStr)
18228 button.icursor(NewPos)
18232 spbox = event.widget
18233 if sys.version_info[0] == 3
and sys.version_info[1] > 6:
18235 if event.num == 4
or event.delta > 0:
18236 spbox.invoke(
'buttonup')
18237 if event.num == 5
or event.delta < 0:
18238 spbox.invoke(
'buttondown')
18242 global AWGAMode, AWGATerm, AWGAShape, AWGSync, awgwindow, AWGAPhaseDelay, AWGBPhaseDelay
18243 global AWGBMode, AWGBTerm, AWGBShape, AWGScreenStatus, AWGARepeatFlag, AWGBRepeatFlag
18244 global AWGABurstFlag, AWGBBurstFlag, AWGAShapeLabel, AWGBShapeLabel, AWGShowAdvanced
18245 global AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry, AWGAPhaseEntry, AWGADutyCycleEntry
18246 global AWGBAmplEntry, AWGBOffsetEntry, AWGBFreqEntry, AWGBPhaseEntry, AWGBDutyCycleEntry
18247 global AWGALength, AWGBLength, RevDate, phasealab, phaseblab, AWGAModeLabel, AWGBModeLabel
18248 global AWGAIOMode, AWGBIOMode, duty1lab, duty2lab, awgaph, awgadel, awgbph, awgbdel
18249 global AwgLayout, AWG_Amp_Mode, awgsync, SWRev
18250 global amp1lab, amp2lab, off1lab, off2lab, Reset_Freq, AWG_2X, BisCompA, FWRevOne
18251 global ModeAMenu, ShapeAMenu, amp1lab, off1lab, freq1lab, awgaph, awgadel, ModeBMenu, ShapeBMenu
18252 global amp2lab, off2lab, freq2lab, awgbph, awgbdel, bcompa, awgsync
18253 global AWGANoiseEntry, AWGBNoiseEntry, AWGAsbnoise, AWGBsbnoise, NoiseList
18255 if AWGScreenStatus.get() == 0:
18256 AWGScreenStatus.set(1)
18258 awgwindow = Toplevel()
18259 awgwindow.title(
"AWG Controls " + SWRev + RevDate)
18260 awgwindow.resizable(FALSE,FALSE)
18261 awgwindow.geometry(
'+0+100')
18262 awgwindow.protocol(
"WM_DELETE_WINDOW", DestroyAWGScreen)
18264 frame2 = LabelFrame(awgwindow, text=
"AWG CH A", style=
"A10R1.TLabelframe")
18265 frame3 = LabelFrame(awgwindow, text=
"AWG CH B", style=
"A10R2.TLabelframe")
18267 if AwgLayout ==
"Horz":
18268 frame2.pack(side=LEFT, expand=1, fill=X)
18269 frame3.pack(side=LEFT, expand=1, fill=X)
18271 frame2.pack(side=TOP, expand=1, fill=Y)
18272 frame3.pack(side=TOP, expand=1, fill=Y)
18275 awg1eb = Frame( frame2 )
18276 awg1eb.pack(side=TOP)
18277 ModeAMenu = Menubutton(awg1eb, text=
"Mode", style=
"W5.TButton")
18278 ModeAMenu.menu = Menu(ModeAMenu, tearoff = 0 )
18279 ModeAMenu[
"menu"] = ModeAMenu.menu
18280 ModeAMenu.menu.add_command(label=
"-Mode-", foreground=
"blue", command=donothing)
18281 ModeAMenu.menu.add_radiobutton(label=
"SVMI", variable=AWGAMode, value=0, command=BAWGAModeLabel)
18282 ModeAMenu.menu.add_radiobutton(label=
"SIMV", variable=AWGAMode, value=1, command=BAWGAModeLabel)
18283 ModeAMenu.menu.add_radiobutton(label=
"Hi-Z", variable=AWGAMode, value=2, command=BAWGAModeLabel)
18284 ModeAMenu.menu.add_checkbutton(label=
"Split I/O", variable=AWGAIOMode, command=BAWGAModeLabel)
18285 ModeAMenu.menu.add_separator()
18286 ModeAMenu.menu.add_command(label=
"-Term-", foreground=
"blue", command=donothing)
18287 ModeAMenu.menu.add_radiobutton(label=
"Open", variable=AWGATerm, value=0, command=UpdateAwgCont)
18288 ModeAMenu.menu.add_radiobutton(label=
"To GND", variable=AWGATerm, value=1, command=UpdateAwgCont)
18289 ModeAMenu.menu.add_radiobutton(label=
"To 2.5V", variable=AWGATerm, value=2, command=UpdateAwgCont)
18290 ModeAMenu.pack(side=LEFT, anchor=W)
18291 ShapeAMenu = Menubutton(awg1eb, text=
"Shape", style=
"W6.TButton")
18292 ShapeAMenu.menu = Menu(ShapeAMenu, tearoff = 0 )
18293 ShapeAMenu[
"menu"] = ShapeAMenu.menu
18294 ShapeAMenu.menu.add_command(label=
"-Basic-", foreground=
"blue", command=donothing)
18295 ShapeAMenu.menu.add_radiobutton(label=
"DC", variable=AWGAShape, value=0, command=ReMakeAWGwaves)
18296 ShapeAMenu.menu.add_radiobutton(label=
"Sine", variable=AWGAShape, value=18, command=ReMakeAWGwaves)
18297 ShapeAMenu.menu.add_radiobutton(label=
"Triangle", variable=AWGAShape, value=2, command=ReMakeAWGwaves)
18298 ShapeAMenu.menu.add_radiobutton(label=
"Sawtooth", variable=AWGAShape, value=3, command=ReMakeAWGwaves)
18299 ShapeAMenu.menu.add_radiobutton(label=
"Square", variable=AWGAShape, value=4, command=ReMakeAWGwaves)
18300 ShapeAMenu.menu.add_radiobutton(label=
"StairStep", variable=AWGAShape, value=5, command=ReMakeAWGwaves)
18301 if AWGShowAdvanced.get() > 0:
18302 ShapeAMenu.menu.add_command(label=
"-Advanced-", foreground=
"blue", command=donothing)
18303 ShapeAMenu.menu.add_radiobutton(label=
"Impulse", variable=AWGAShape, value=9, command=ReMakeAWGwaves)
18304 ShapeAMenu.menu.add_radiobutton(label=
"Trapezoid", variable=AWGAShape, value=11, command=ReMakeAWGwaves)
18305 ShapeAMenu.menu.add_radiobutton(label=
"Pulse", variable=AWGAShape, value=20, command=ReMakeAWGwaves)
18306 ShapeAMenu.menu.add_radiobutton(label=
"Ramp", variable=AWGAShape, value=16, command=ReMakeAWGwaves)
18307 ShapeAMenu.menu.add_radiobutton(label=
"SSQ Pulse", variable=AWGAShape, value=15, command=ReMakeAWGwaves)
18308 ShapeAMenu.menu.add_radiobutton(label=
"U-D Ramp", variable=AWGAShape, value=12, command=ReMakeAWGwaves)
18309 ShapeAMenu.menu.add_radiobutton(label=
"Fourier Series", variable=AWGAShape, value=14, command=AWGAMakeFourier)
18310 ShapeAMenu.menu.add_radiobutton(label=
"Sin X/X", variable=AWGAShape, value=19, command=ReMakeAWGwaves)
18311 ShapeAMenu.menu.add_radiobutton(label=
"PWM Sine", variable=AWGAShape, value=17, command=ReMakeAWGwaves)
18312 ShapeAMenu.menu.add_radiobutton(label=
"FM Sine", variable=AWGAShape, value=21, command=AWGAMakeFMSine)
18313 ShapeAMenu.menu.add_radiobutton(label=
"AM Sine", variable=AWGAShape, value=22, command=AWGAMakeAMSine)
18314 ShapeAMenu.menu.add_radiobutton(label=
"UU Noise", variable=AWGAShape, value=7, command=ReMakeAWGwaves)
18315 ShapeAMenu.menu.add_radiobutton(label=
"UG Noise", variable=AWGAShape, value=8, command=ReMakeAWGwaves)
18317 ShapeAMenu.menu.add_separator()
18318 ShapeAMenu.menu.add_radiobutton(label=
"Math", variable=AWGAShape, value=10, command=AWGAMakeMath)
18319 ShapeAMenu.menu.add_radiobutton(label=
"Read CSV File", variable=AWGAShape, value=6, command=AWGAReadFile)
18320 ShapeAMenu.menu.add_radiobutton(label=
"Read WAV File", variable=AWGAShape, value=13, command=AWGAReadWAV)
18321 ShapeAMenu.menu.add_command(label=
"Save CSV File", command=AWGAWriteFile)
18322 ShapeAMenu.menu.add_checkbutton(label=
'Burst', variable=AWGABurstFlag, command=AWGANumCycles)
18323 ShapeAMenu.menu.add_checkbutton(label=
'Repeat', variable=AWGARepeatFlag)
18324 ShapeAMenu.pack(side=LEFT, anchor=W)
18326 AWGAModeLabel = Label(frame2, text=
"AWG A Mode")
18327 AWGAModeLabel.pack(side=TOP)
18328 AWGAShapeLabel = Label(frame2, text=
"AWG A Shape")
18329 AWGAShapeLabel.pack(side=TOP)
18331 awg1ampl = Frame( frame2 )
18332 awg1ampl.pack(side=TOP)
18333 AWGAAmplEntry = Entry(awg1ampl, width=5, cursor=
'double_arrow')
18334 AWGAAmplEntry.bind(
"<Return>", UpdateAwgContRet)
18335 AWGAAmplEntry.bind(
'<MouseWheel>', onAWGAscroll)
18336 AWGAAmplEntry.bind(
"<Button-4>", onAWGAscroll)
18337 AWGAAmplEntry.bind(
"<Button-5>", onAWGAscroll)
18338 AWGAAmplEntry.bind(
'<Key>', onTextKeyAWG)
18339 AWGAAmplEntry.pack(side=LEFT, anchor=W)
18340 AWGAAmplEntry.delete(0,
"end")
18341 AWGAAmplEntry.insert(0,0.0)
18342 amp1lab = Label(awg1ampl)
18343 amp1lab.pack(side=LEFT, anchor=W)
18345 awg1off = Frame( frame2 )
18346 awg1off.pack(side=TOP)
18347 AWGAOffsetEntry = Entry(awg1off, width=5, cursor=
'double_arrow')
18348 AWGAOffsetEntry.bind(
"<Return>", UpdateAwgContRet)
18349 AWGAOffsetEntry.bind(
'<MouseWheel>', onAWGAscroll)
18350 AWGAOffsetEntry.bind(
"<Button-4>", onAWGAscroll)
18351 AWGAOffsetEntry.bind(
"<Button-5>", onAWGAscroll)
18352 AWGAOffsetEntry.bind(
'<Key>', onTextKeyAWG)
18353 AWGAOffsetEntry.pack(side=LEFT, anchor=W)
18354 AWGAOffsetEntry.delete(0,
"end")
18355 AWGAOffsetEntry.insert(0,0.0)
18356 off1lab = Label(awg1off)
18357 off1lab.pack(side=LEFT, anchor=W)
18358 if AWG_Amp_Mode.get() == 0:
18359 amp1lab.config(text =
"Min Ch A" )
18360 off1lab.config(text =
"Max Ch A" )
18362 amp1lab.config(text =
"Amp Ch A" )
18363 off1lab.config(text =
"Off Ch A" )
18365 awg1freq = Frame( frame2 )
18366 awg1freq.pack(side=TOP)
18367 AWGAFreqEntry = Entry(awg1freq, width=7, cursor=
'double_arrow')
18368 AWGAFreqEntry.bind(
"<Return>", UpdateAwgContRet)
18369 AWGAFreqEntry.bind(
'<MouseWheel>', onAWGAscroll)
18370 AWGAFreqEntry.bind(
"<Button-4>", onAWGAscroll)
18371 AWGAFreqEntry.bind(
"<Button-5>", onAWGAscroll)
18372 AWGAFreqEntry.bind(
'<Key>', onTextKeyAWG)
18373 AWGAFreqEntry.pack(side=LEFT, anchor=W)
18374 AWGAFreqEntry.delete(0,
"end")
18375 AWGAFreqEntry.insert(0,100.0)
18376 freq1lab = Label(awg1freq, text=
"Freq Ch A")
18377 freq1lab.pack(side=LEFT, anchor=W)
18380 awg1phase = Frame( frame2 )
18381 awg1phase.pack(side=TOP)
18382 awgaph = Button(awg1phase, text=
"Phase", style=
"W5.TButton", command=ToggleAWGAPhaseDelay)
18383 awgaph.pack(side=LEFT, anchor=W)
18384 AWGAPhaseEntry = Entry(awg1phase, width=4, cursor=
'double_arrow')
18385 AWGAPhaseEntry.bind(
"<Return>", UpdateAwgContRet)
18386 AWGAPhaseEntry.bind(
'<MouseWheel>', onAWGAscroll)
18387 AWGAPhaseEntry.bind(
"<Button-4>", onAWGAscroll)
18388 AWGAPhaseEntry.bind(
"<Button-5>", onAWGAscroll)
18389 AWGAPhaseEntry.bind(
'<Key>', onTextKeyAWG)
18390 AWGAPhaseEntry.pack(side=LEFT, anchor=W)
18391 AWGAPhaseEntry.delete(0,
"end")
18392 AWGAPhaseEntry.insert(0,0)
18393 phasealab = Label(awg1phase, text=
"Deg")
18394 phasealab.pack(side=LEFT, anchor=W)
18396 awg1dc = Frame( frame2 )
18397 awg1dc.pack(side=TOP)
18398 AWGADutyCycleEntry = Entry(awg1dc, width=5, cursor=
'double_arrow')
18399 AWGADutyCycleEntry.bind(
"<Return>", UpdateAwgContRet)
18400 AWGADutyCycleEntry.bind(
'<MouseWheel>', onAWGAscroll)
18401 AWGADutyCycleEntry.bind(
"<Button-4>", onAWGAscroll)
18402 AWGADutyCycleEntry.bind(
"<Button-5>", onAWGAscroll)
18403 AWGADutyCycleEntry.bind(
'<Key>', onTextKeyAWG)
18404 AWGADutyCycleEntry.pack(side=LEFT, anchor=W)
18405 AWGADutyCycleEntry.delete(0,
"end")
18406 AWGADutyCycleEntry.insert(0,50)
18407 duty1lab = Label(awg1dc, text=
"%")
18408 duty1lab.pack(side=LEFT, anchor=W)
18410 AWGALength = Label(frame2, text=
"Length")
18411 AWGALength.pack(side=TOP)
18413 anoise = Frame( frame2 )
18414 anoise.pack(side=TOP)
18415 AWGANoise = Label(anoise, text=
"Noise")
18416 AWGANoise.pack(side=LEFT, anchor=W)
18417 AWGAsbnoise = Spinbox(anoise, width=8, cursor=
'double_arrow', values=NoiseList, command=ReMakeAWGwaves)
18418 AWGAsbnoise.bind(
'<MouseWheel>', onSpinBoxScroll)
18419 AWGAsbnoise.bind(
"<Button-4>", onSpinBoxScroll)
18420 AWGAsbnoise.bind(
"<Button-5>", onSpinBoxScroll)
18421 AWGAsbnoise.pack(side=LEFT, anchor=W)
18422 AWGANoiseEntry = Entry(anoise, width=5, cursor=
'double_arrow')
18423 AWGANoiseEntry.bind(
"<Return>", UpdateAwgContRet)
18424 AWGANoiseEntry.bind(
'<MouseWheel>', onAWGAscroll)
18425 AWGANoiseEntry.bind(
"<Button-4>", onAWGAscroll)
18426 AWGANoiseEntry.bind(
"<Button-5>", onAWGAscroll)
18427 AWGANoiseEntry.bind(
'<Key>', onTextKeyAWG)
18428 AWGANoiseEntry.pack(side=LEFT, anchor=W)
18429 AWGANoiseEntry.delete(0,
"end")
18430 AWGANoiseEntry.insert(0,0.0)
18432 if FWRevOne > 2.16:
18433 awg2x1 = Radiobutton(frame2, text=
"Both CH 1X", variable=AWG_2X, value=0, command=BAWG2X)
18434 awg2x1.pack(side=TOP)
18435 awg2x2 = Radiobutton(frame2, text=
"CH A 2X", variable=AWG_2X, value=1, command=BAWG2X)
18436 awg2x2.pack(side=TOP)
18437 awg2x3 = Radiobutton(frame2, text=
"CH B 2X", variable=AWG_2X, value=2, command=BAWG2X)
18438 awg2x3.pack(side=TOP)
18440 awgsync = Checkbutton(frame2, text=
"Sync AWG", variable=AWGSync, command=BAWGSync)
18441 awgsync.pack(side=TOP)
18444 awg2eb = Frame( frame3 )
18445 awg2eb.pack(side=TOP)
18446 ModeBMenu = Menubutton(awg2eb, text=
"Mode", style=
"W5.TButton")
18447 ModeBMenu.menu = Menu(ModeBMenu, tearoff = 0 )
18448 ModeBMenu[
"menu"] = ModeBMenu.menu
18449 ModeBMenu.menu.add_command(label=
"-Mode-", foreground=
"blue", command=donothing)
18450 ModeBMenu.menu.add_radiobutton(label=
"SVMI", variable=AWGBMode, value=0, command=BAWGBModeLabel)
18451 ModeBMenu.menu.add_radiobutton(label=
"SIMV", variable=AWGBMode, value=1, command=BAWGBModeLabel)
18452 ModeBMenu.menu.add_radiobutton(label=
"Hi-Z", variable=AWGBMode, value=2, command=BAWGBModeLabel)
18453 ModeBMenu.menu.add_checkbutton(label=
"Split I/O", variable=AWGBIOMode, command=BAWGBModeLabel)
18454 ModeBMenu.menu.add_separator()
18455 ModeBMenu.menu.add_command(label=
"-Term-", foreground=
"blue", command=donothing)
18456 ModeBMenu.menu.add_radiobutton(label=
"Open", variable=AWGBTerm, value=0, command=UpdateAwgCont)
18457 ModeBMenu.menu.add_radiobutton(label=
"To GND", variable=AWGBTerm, value=1, command=UpdateAwgCont)
18458 ModeBMenu.menu.add_radiobutton(label=
"To 2.5V", variable=AWGBTerm, value=2, command=UpdateAwgCont)
18459 ModeBMenu.pack(side=LEFT, anchor=W)
18460 ShapeBMenu = Menubutton(awg2eb, text=
"Shape", style=
"W6.TButton")
18461 ShapeBMenu.menu = Menu(ShapeBMenu, tearoff = 0 )
18462 ShapeBMenu[
"menu"] = ShapeBMenu.menu
18463 ShapeBMenu.menu.add_command(label=
"-Basic-", foreground=
"blue", command=donothing)
18464 ShapeBMenu.menu.add_radiobutton(label=
"DC", variable=AWGBShape, value=0, command=ReMakeAWGwaves)
18465 ShapeBMenu.menu.add_radiobutton(label=
"Sine", variable=AWGBShape, value=18, command=ReMakeAWGwaves)
18466 ShapeBMenu.menu.add_radiobutton(label=
"Triangle", variable=AWGBShape, value=2, command=ReMakeAWGwaves)
18467 ShapeBMenu.menu.add_radiobutton(label=
"Sawtooth", variable=AWGBShape, value=3, command=ReMakeAWGwaves)
18468 ShapeBMenu.menu.add_radiobutton(label=
"Square", variable=AWGBShape, value=4, command=ReMakeAWGwaves)
18469 ShapeBMenu.menu.add_radiobutton(label=
"StairStep", variable=AWGBShape, value=5, command=ReMakeAWGwaves)
18470 if AWGShowAdvanced.get() > 0:
18471 ShapeBMenu.menu.add_command(label=
"-Advanced-", foreground=
"blue", command=donothing)
18472 ShapeBMenu.menu.add_radiobutton(label=
"Impulse", variable=AWGBShape, value=9, command=ReMakeAWGwaves)
18473 ShapeBMenu.menu.add_radiobutton(label=
"Trapezoid", variable=AWGBShape, value=11, command=ReMakeAWGwaves)
18474 ShapeBMenu.menu.add_radiobutton(label=
"Pulse", variable=AWGBShape, value=20, command=ReMakeAWGwaves)
18475 ShapeBMenu.menu.add_radiobutton(label=
"Ramp", variable=AWGBShape, value=16, command=ReMakeAWGwaves)
18476 ShapeBMenu.menu.add_radiobutton(label=
"SSQ Pulse", variable=AWGBShape, value=15, command=ReMakeAWGwaves)
18477 ShapeBMenu.menu.add_radiobutton(label=
"U-D Ramp", variable=AWGBShape, value=12, command=ReMakeAWGwaves)
18478 ShapeBMenu.menu.add_radiobutton(label=
"Fourier Series", variable=AWGBShape, value=14, command=AWGBMakeFourier)
18479 ShapeBMenu.menu.add_radiobutton(label=
"Sin X/X", variable=AWGBShape, value=19, command=ReMakeAWGwaves)
18480 ShapeBMenu.menu.add_radiobutton(label=
"PWM Sine", variable=AWGBShape, value=17, command=ReMakeAWGwaves)
18481 ShapeBMenu.menu.add_radiobutton(label=
"UU Noise", variable=AWGBShape, value=7, command=ReMakeAWGwaves)
18482 ShapeBMenu.menu.add_radiobutton(label=
"UG Noise", variable=AWGBShape, value=8, command=ReMakeAWGwaves)
18484 ShapeBMenu.menu.add_separator()
18485 ShapeBMenu.menu.add_radiobutton(label=
"Math", variable=AWGBShape, value=10, command=AWGBMakeMath)
18486 ShapeBMenu.menu.add_radiobutton(label=
"Read CSV File", variable=AWGBShape, value=6, command=AWGBReadFile)
18487 ShapeBMenu.menu.add_radiobutton(label=
"Read WAV File", variable=AWGBShape, value=13, command=AWGBReadWAV)
18488 ShapeBMenu.menu.add_command(label=
"Save CSV File", command=AWGBWriteFile)
18489 ShapeBMenu.menu.add_checkbutton(label=
'Burst', variable=AWGBBurstFlag, command=AWGBNumCycles)
18490 ShapeBMenu.menu.add_checkbutton(label=
'Repeat', variable=AWGBRepeatFlag)
18491 ShapeBMenu.pack(side=LEFT, anchor=W)
18493 AWGBModeLabel = Label(frame3, text=
"AWG B Mode")
18494 AWGBModeLabel.pack(side=TOP)
18495 AWGBShapeLabel = Label(frame3, text=
"AWG B Shape")
18496 AWGBShapeLabel.pack(side=TOP)
18498 awg2ampl = Frame( frame3 )
18499 awg2ampl.pack(side=TOP)
18500 AWGBAmplEntry = Entry(awg2ampl, width=5, cursor=
'double_arrow')
18501 AWGBAmplEntry.bind(
"<Return>", UpdateAwgContRet)
18502 AWGBAmplEntry.bind(
'<MouseWheel>', onAWGBscroll)
18503 AWGBAmplEntry.bind(
"<Button-4>", onAWGBscroll)
18504 AWGBAmplEntry.bind(
"<Button-5>", onAWGBscroll)
18505 AWGBAmplEntry.bind(
'<Key>', onTextKeyAWG)
18506 AWGBAmplEntry.pack(side=LEFT, anchor=W)
18507 AWGBAmplEntry.delete(0,
"end")
18508 AWGBAmplEntry.insert(0,0.0)
18509 amp2lab = Label(awg2ampl)
18510 amp2lab.pack(side=LEFT, anchor=W)
18512 awg2off = Frame( frame3 )
18513 awg2off.pack(side=TOP)
18514 AWGBOffsetEntry = Entry(awg2off, width=5, cursor=
'double_arrow')
18515 AWGBOffsetEntry.bind(
"<Return>", UpdateAwgContRet)
18516 AWGBOffsetEntry.bind(
'<MouseWheel>', onAWGBscroll)
18517 AWGBOffsetEntry.bind(
"<Button-4>", onAWGBscroll)
18518 AWGBOffsetEntry.bind(
"<Button-5>", onAWGBscroll)
18519 AWGBOffsetEntry.bind(
'<Key>', onTextKeyAWG)
18520 AWGBOffsetEntry.pack(side=LEFT, anchor=W)
18521 AWGBOffsetEntry.delete(0,
"end")
18522 AWGBOffsetEntry.insert(0,0.0)
18523 off2lab = Label(awg2off)
18524 off2lab.pack(side=LEFT, anchor=W)
18525 if AWG_Amp_Mode.get() == 0:
18526 amp2lab.config(text =
"Min Ch B" )
18527 off2lab.config(text =
"Max Ch B" )
18529 amp2lab.config(text =
"Amp Ch B" )
18530 off2lab.config(text =
"Off Ch B" )
18532 awg2freq = Frame( frame3 )
18533 awg2freq.pack(side=TOP)
18534 AWGBFreqEntry = Entry(awg2freq, width=7, cursor=
'double_arrow')
18535 AWGBFreqEntry.bind(
"<Return>", UpdateAwgContRet)
18536 AWGBFreqEntry.bind(
'<MouseWheel>', onAWGBscroll)
18537 AWGBFreqEntry.bind(
"<Button-4>", onAWGBscroll)
18538 AWGBFreqEntry.bind(
"<Button-5>", onAWGBscroll)
18539 AWGBFreqEntry.bind(
'<Key>', onTextKeyAWG)
18540 AWGBFreqEntry.pack(side=LEFT, anchor=W)
18541 AWGBFreqEntry.delete(0,
"end")
18542 AWGBFreqEntry.insert(0,100.0)
18543 freq2lab = Label(awg2freq, text=
"Freq Ch B")
18544 freq2lab.pack(side=LEFT, anchor=W)
18547 awg2phase = Frame( frame3 )
18548 awg2phase.pack(side=TOP)
18549 awgbph = Button(awg2phase, text=
"Phase", style=
"W5.TButton", command=ToggleAWGBPhaseDelay)
18550 awgbph.pack(side=LEFT, anchor=W)
18551 AWGBPhaseEntry = Entry(awg2phase, width=4, cursor=
'double_arrow')
18552 AWGBPhaseEntry.bind(
"<Return>", UpdateAwgContRet)
18553 AWGBPhaseEntry.bind(
'<MouseWheel>', onAWGBscroll)
18554 AWGBPhaseEntry.bind(
"<Button-4>", onAWGBscroll)
18555 AWGBPhaseEntry.bind(
"<Button-5>", onAWGBscroll)
18556 AWGBPhaseEntry.bind(
'<Key>', onTextKeyAWG)
18557 AWGBPhaseEntry.pack(side=LEFT, anchor=W)
18558 AWGBPhaseEntry.delete(0,
"end")
18559 AWGBPhaseEntry.insert(0,0)
18560 phaseblab = Label(awg2phase, text=
"Deg")
18561 phaseblab.pack(side=LEFT, anchor=W)
18563 awg2dc = Frame( frame3 )
18564 awg2dc.pack(side=TOP)
18565 AWGBDutyCycleEntry = Entry(awg2dc, width=5, cursor=
'double_arrow')
18566 AWGBDutyCycleEntry.bind(
"<Return>", UpdateAwgContRet)
18567 AWGBDutyCycleEntry.bind(
'<MouseWheel>', onAWGBscroll)
18568 AWGBDutyCycleEntry.bind(
"<Button-4>", onAWGBscroll)
18569 AWGBDutyCycleEntry.bind(
"<Button-5>", onAWGBscroll)
18570 AWGBDutyCycleEntry.bind(
'<Key>', onTextKeyAWG)
18571 AWGBDutyCycleEntry.pack(side=LEFT, anchor=W)
18572 AWGBDutyCycleEntry.delete(0,
"end")
18573 AWGBDutyCycleEntry.insert(0,50)
18574 duty2lab = Label(awg2dc, text=
"%")
18575 duty2lab.pack(side=LEFT, anchor=W)
18577 AWGBLength = Label(frame3, text=
"Length")
18578 AWGBLength.pack(side=TOP)
18580 bnoise = Frame( frame3 )
18581 bnoise.pack(side=TOP)
18582 AWGBNoise = Label(bnoise, text=
"Noise")
18583 AWGBNoise.pack(side=LEFT, anchor=W)
18584 AWGBsbnoise = Spinbox(bnoise, width=8, cursor=
'double_arrow', values=NoiseList, command=ReMakeAWGwaves)
18585 AWGBsbnoise.bind(
'<MouseWheel>', onSpinBoxScroll)
18586 AWGBsbnoise.bind(
"<Button-4>", onSpinBoxScroll)
18587 AWGBsbnoise.bind(
"<Button-5>", onSpinBoxScroll)
18588 AWGBsbnoise.pack(side=LEFT, anchor=W)
18589 AWGBNoiseEntry = Entry(bnoise, width=5, cursor=
'double_arrow')
18590 AWGBNoiseEntry.bind(
"<Return>", UpdateAwgContRet)
18591 AWGBNoiseEntry.bind(
'<MouseWheel>', onAWGBscroll)
18592 AWGBNoiseEntry.bind(
"<Button-4>", onAWGBscroll)
18593 AWGBNoiseEntry.bind(
"<Button-5>", onAWGBscroll)
18594 AWGBNoiseEntry.bind(
'<Key>', onTextKeyAWG)
18595 AWGBNoiseEntry.pack(side=LEFT, anchor=W)
18596 AWGBNoiseEntry.delete(0,
"end")
18597 AWGBNoiseEntry.insert(0,0.0)
18599 bcompa = Checkbutton(frame3, text=
"B = Comp A", variable=BisCompA, command=ReMakeAWGwaves)
18600 bcompa.pack(side=TOP)
18601 if FWRevOne > 2.16:
18602 awgsync = Checkbutton(frame3, text=
"Sync AWG", variable=AWGSync, command=BAWGSync)
18603 awgsync.pack(side=TOP)
18605 dismissbutton = Button(frame3, text=
"Minimize", style=
"W8.TButton", command=DestroyAWGScreen)
18606 dismissbutton.pack(side=TOP)
18607 if ShowBallonHelp > 0:
18608 BuildAWGAPhase_tip =
CreateToolTip(awgaph,
'Toggle between degrees and time')
18609 BuildAWGBPhase_tip =
CreateToolTip(awgbph,
'Toggle between degrees and time')
18610 BuildAWGSync_tip =
CreateToolTip(awgsync,
'Toggle between continuous and discontinuous modes')
18611 BuildBComp_tip =
CreateToolTip(bcompa,
'Lock CH B to be the inverse of CH A')
18612 BuildModeAMenu_tip =
CreateToolTip(ModeAMenu,
'Configure channel output mode')
18613 BuildModeBMenu_tip =
CreateToolTip(ModeBMenu,
'Configure channel output mode')
18614 BuildShapeAMenu_tip =
CreateToolTip(ShapeAMenu,
'Set channel waveform shape')
18615 BuildShapeBMenu_tip =
CreateToolTip(ShapeBMenu,
'Set channel waveform shape')
18617 awgwindow.deiconify()
18620 global AWG_2X, devx, AWGAIOMode, AWGBIOMode, BisCompA
18623 if AWG_2X.get() == 0:
18624 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
18625 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
18626 elif AWG_2X.get() == 1:
18627 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
18628 devx.ctrl_transfer(0x40, 0x25, 0x0, 0, 0, 0, 100)
18629 if AWGBIOMode.get() == 0:
18630 devx.ctrl_transfer(0x40, 0x51, 40, 0, 0, 0, 100)
18631 devx.ctrl_transfer(0x40, 0x51, 52, 0, 0, 0, 100)
18633 elif AWG_2X.get() == 2:
18634 devx.ctrl_transfer(0x40, 0x24, 0x1, 0, 0, 0, 100)
18635 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
18636 if AWGAIOMode.get() == 0:
18637 devx.ctrl_transfer(0x40, 0x51, 35, 0, 0, 0, 100)
18638 devx.ctrl_transfer(0x40, 0x51, 51, 0, 0, 0, 100)
18642 global awgwindow, AWGScreenStatus
18645 awgwindow.iconify()
18649 global MuxScreenStatus, muxwindow, RevDate, DacScreenStatus, DigScreenStatus
18650 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
18651 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry, SyncButton
18652 global CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab, CHBlab, CHBofflab
18653 global CHB_cba, CHB_cbb, CHB_cbc, CHB_cbd
18654 global CHB_Cofflab, CHB_Dofflab, awgsync, SWRev, BorderSize
18655 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxEnb, MuxSync, hipulseimg, lowpulseimg
18656 global ShowRMA, ShowRMB, ShowRMC, ShowRMD
18657 global ChopMuxMode, ChopTrig, DualMuxMode, ShowBallonHelp
18659 if MuxScreenStatus.get() == 0
and DacScreenStatus.get() == 0
and DigScreenStatus.get() == 0:
18660 MuxScreenStatus.set(1)
18664 muxwindow = Toplevel()
18665 muxwindow.title(
"External Mux " + SWRev + RevDate)
18666 muxwindow.resizable(FALSE,FALSE)
18667 muxwindow.protocol(
"WM_DELETE_WINDOW", DestroyMuxScreen)
18669 frameM = LabelFrame(muxwindow, text=
"External Analog Mux", style=
"A10.TLabelframe")
18670 frameM.pack(side=LEFT, expand=1, fill=X)
18673 frameA = Frame(frameM)
18674 frameA.pack(side=TOP)
18675 CHB_cba = Checkbutton(frameA, text=
'CB-A', style=
"Strace2.TCheckbutton", variable=Show_CBA, command=UpdateTimeTrace)
18676 CHB_cba.pack(side=LEFT, anchor=W)
18677 CHB_Asb = Spinbox(frameA, width=4, cursor=
'double_arrow', values=CHvpdiv, command=UpdateTimeTrace)
18678 CHB_Asb.bind(
'<MouseWheel>', onSpinBoxScroll)
18679 CHB_Asb.bind(
"<Button-4>", onSpinBoxScroll)
18680 CHB_Asb.bind(
"<Button-5>", onSpinBoxScroll)
18681 CHB_Asb.pack(side=LEFT)
18682 CHB_Asb.delete(0,
"end")
18683 CHB_Asb.insert(0,0.5)
18685 CHB_Alab = Button(frameA, text=
"CB-A V/Div", style=
"Rtrace2.TButton", command=SetScaleMuxA)
18686 CHB_Alab.pack(side=LEFT)
18687 CHB_APosEntry = Entry(frameA, width=5, cursor=
'double_arrow')
18688 CHB_APosEntry.bind(
'<Return>', onTextKey)
18689 CHB_APosEntry.bind(
'<MouseWheel>', onTextScroll)
18690 CHB_APosEntry.bind(
"<Button-4>", onTextScroll)
18691 CHB_APosEntry.bind(
"<Button-5>", onTextScroll)
18692 CHB_APosEntry.bind(
'<Key>', onTextKey)
18693 CHB_APosEntry.pack(side=LEFT)
18694 CHB_APosEntry.delete(0,
"end")
18695 CHB_APosEntry.insert(0,2.5)
18696 CHB_Aofflab = Button(frameA, text=
"CB-A Pos", style=
"Rtrace2.TButton", command=SetMuxAPoss)
18697 CHB_Aofflab.pack(side=LEFT)
18699 frameB = Frame(frameM)
18700 frameB.pack(side=TOP)
18701 CHB_cbb = Checkbutton(frameB, text=
'CB-B', style=
"Strace6.TCheckbutton", variable=Show_CBB, command=UpdateTimeTrace)
18702 CHB_cbb.pack(side=LEFT, anchor=W)
18703 CHB_Bsb = Spinbox(frameB, width=4, cursor=
'double_arrow', values=CHvpdiv, command=UpdateTimeTrace)
18704 CHB_Bsb.bind(
'<MouseWheel>', onSpinBoxScroll)
18705 CHB_Bsb.bind(
"<Button-4>", onSpinBoxScroll)
18706 CHB_Bsb.bind(
"<Button-5>", onSpinBoxScroll)
18707 CHB_Bsb.pack(side=LEFT)
18708 CHB_Bsb.delete(0,
"end")
18709 CHB_Bsb.insert(0,0.5)
18710 CHB_Blab = Button(frameB, text=
"CB-B V/Div", style=
"Rtrace6.TButton", command=SetScaleMuxB)
18711 CHB_Blab.pack(side=LEFT)
18712 CHB_BPosEntry = Entry(frameB, width=5, cursor=
'double_arrow')
18713 CHB_BPosEntry.bind(
'<Return>', onTextKey)
18714 CHB_BPosEntry.bind(
'<MouseWheel>', onTextScroll)
18715 CHB_BPosEntry.bind(
"<Button-4>", onTextScroll)
18716 CHB_BPosEntry.bind(
"<Button-5>", onTextScroll)
18717 CHB_BPosEntry.bind(
'<Key>', onTextKey)
18718 CHB_BPosEntry.pack(side=LEFT)
18719 CHB_BPosEntry.delete(0,
"end")
18720 CHB_BPosEntry.insert(0,2.5)
18721 CHB_Bofflab = Button(frameB, text=
"CB-B Pos", style=
"Rtrace6.TButton", command=SetMuxBPoss)
18722 CHB_Bofflab.pack(side=LEFT)
18724 frameC = Frame(frameM)
18725 frameC.pack(side=TOP)
18726 CHB_cbc = Checkbutton(frameC, text=
'CB-C', style=
"Strace7.TCheckbutton", variable=Show_CBC, command=UpdateTimeTrace)
18727 CHB_cbc.pack(side=LEFT, anchor=W)
18728 CHB_Csb = Spinbox(frameC, width=4, cursor=
'double_arrow', values=CHvpdiv, command=UpdateTimeTrace)
18729 CHB_Csb.bind(
'<MouseWheel>', onSpinBoxScroll)
18730 CHB_Csb.bind(
"<Button-4>", onSpinBoxScroll)
18731 CHB_Csb.bind(
"<Button-5>", onSpinBoxScroll)
18732 CHB_Csb.pack(side=LEFT)
18733 CHB_Csb.delete(0,
"end")
18734 CHB_Csb.insert(0,0.5)
18736 CHB_Clab = Button(frameC, text=
"CB-C V/Div", style=
"Rtrace7.TButton", command=SetScaleMuxC)
18737 CHB_Clab.pack(side=LEFT)
18738 CHB_CPosEntry = Entry(frameC, width=5, cursor=
'double_arrow')
18739 CHB_CPosEntry.bind(
'<Return>', onTextKey)
18740 CHB_CPosEntry.bind(
'<MouseWheel>', onTextScroll)
18741 CHB_CPosEntry.bind(
"<Button-4>", onTextScroll)
18742 CHB_CPosEntry.bind(
"<Button-5>", onTextScroll)
18743 CHB_CPosEntry.bind(
'<Key>', onTextKey)
18744 CHB_CPosEntry.pack(side=LEFT)
18745 CHB_CPosEntry.delete(0,
"end")
18746 CHB_CPosEntry.insert(0,2.5)
18747 CHB_Cofflab = Button(frameC, text=
"CB-C Pos", style=
"Rtrace7.TButton", command=SetMuxCPoss)
18748 CHB_Cofflab.pack(side=LEFT)
18750 frameD = Frame(frameM)
18751 frameD.pack(side=TOP)
18752 CHB_cbd = Checkbutton(frameD, text=
'CB-D', style=
"Strace4.TCheckbutton", variable=Show_CBD, command=UpdateTimeTrace)
18753 CHB_cbd.pack(side=LEFT, anchor=W)
18754 CHB_Dsb = Spinbox(frameD, width=4, cursor=
'double_arrow', values=CHvpdiv, command=UpdateTimeTrace)
18755 CHB_Dsb.bind(
'<MouseWheel>', onSpinBoxScroll)
18756 CHB_Dsb.bind(
"<Button-4>", onSpinBoxScroll)
18757 CHB_Dsb.bind(
"<Button-5>", onSpinBoxScroll)
18758 CHB_Dsb.pack(side=LEFT)
18759 CHB_Dsb.delete(0,
"end")
18760 CHB_Dsb.insert(0,0.5)
18761 CHB_Dlab = Button(frameD, text=
"CB-D V/Div", style=
"Rtrace4.TButton", command=SetScaleMuxD)
18762 CHB_Dlab.pack(side=LEFT)
18763 CHB_DPosEntry = Entry(frameD, width=5, cursor=
'double_arrow')
18764 CHB_DPosEntry.bind(
'<Return>', onTextKey)
18765 CHB_DPosEntry.bind(
'<MouseWheel>', onTextScroll)
18766 CHB_DPosEntry.bind(
"<Button-4>", onTextScroll)
18767 CHB_DPosEntry.bind(
"<Button-5>", onTextScroll)
18768 CHB_DPosEntry.bind(
'<Key>', onTextKey)
18769 CHB_DPosEntry.pack(side=LEFT)
18770 CHB_DPosEntry.delete(0,
"end")
18771 CHB_DPosEntry.insert(0,2.5)
18772 CHB_Dofflab = Button(frameD, text=
"CB-D Pos", style=
"Rtrace4.TButton", command=SetMuxDPoss)
18773 CHB_Dofflab.pack(side=LEFT)
18775 frameR = Frame(frameM)
18776 frameR.pack(side=TOP)
18777 RefTraceMenu = Menubutton(frameR, text=
"Reference Traces", width=17, style=
"W17.TButton")
18778 RefTraceMenu.menu = Menu(RefTraceMenu, tearoff = 0 )
18779 RefTraceMenu[
"menu"] = RefTraceMenu.menu
18780 RefTraceMenu.menu.add_command(label=
"-Take Snap Shot", command=BSnapShot)
18781 RefTraceMenu.menu.add_command(label=
"-Ref MUX trace-", foreground=
"blue", command=donothing)
18782 RefTraceMenu.menu.add_checkbutton(label=
'RMuxA', background=COLORtraceR2, variable=ShowRMA, command=UpdateTimeTrace)
18783 RefTraceMenu.menu.add_checkbutton(label=
'RMuxB', background=COLORtraceR6, variable=ShowRMB, command=UpdateTimeTrace)
18784 RefTraceMenu.menu.add_checkbutton(label=
'RMuxC', background=COLORtraceR7, variable=ShowRMC, command=UpdateTimeTrace)
18785 RefTraceMenu.menu.add_checkbutton(label=
'RMuxD', background=COLORtraceR4, variable=ShowRMD, command=UpdateTimeTrace)
18786 RefTraceMenu.pack(side=LEFT)
18788 frameE = Frame(frameM)
18789 frameE.pack(side=TOP)
18790 muxenab = Checkbutton(frameE, text=
"Mux-Enb", variable=MuxEnb)
18791 muxenab.pack(side=LEFT)
18792 SyncButton = Checkbutton(frameE, compound=TOP, image=hipulseimg, variable=MuxSync, command=SyncImage)
18793 SyncButton.pack(side=LEFT)
18794 dismissbutton = Button(frameE, text=
"Dismiss", style=
"W8.TButton", command=DestroyMuxScreen)
18795 dismissbutton.pack(side=LEFT)
18796 frameF = Frame(frameM)
18797 frameF.pack(side=TOP)
18798 dmx = Checkbutton(frameF, text=
'Dual Mux Split I/O mode', variable=DualMuxMode, command=SetDualMuxMode)
18799 dmx.pack(side=LEFT)
18800 frameCH = Frame(frameM)
18801 frameCH.pack(side=TOP)
18802 altmx = Radiobutton(frameCH, text=
'Alternate Sweep', variable=ChopMuxMode, value=0, command=SetChopMuxMode)
18803 altmx.pack(side=LEFT)
18804 chopmx = Radiobutton(frameCH, text=
'Chop Sweep', variable=ChopMuxMode, value=1, command=SetChopMuxMode)
18805 chopmx.pack(side=LEFT)
18806 frameCT = Frame(frameM)
18807 frameCT.pack(side=TOP)
18809 ChopTrigMenu = Menubutton(frameCT, text=
"Chop Mode Trigger", width=17, style=
"W17.TButton")
18810 ChopTrigMenu.menu = Menu(ChopTrigMenu, tearoff = 0 )
18811 ChopTrigMenu[
"menu"] = ChopTrigMenu.menu
18812 ChopTrigMenu.menu.add_command(label=
"-MUX Chan-", foreground=
"blue", command=donothing)
18813 ChopTrigMenu.menu.add_radiobutton(label=
"None", variable=ChopTrig, value=0)
18814 ChopTrigMenu.menu.add_radiobutton(label=
"Mux A", variable=ChopTrig, value=1)
18815 ChopTrigMenu.menu.add_radiobutton(label=
"Mux B", variable=ChopTrig, value=2)
18816 ChopTrigMenu.menu.add_radiobutton(label=
"Mux C", variable=ChopTrig, value=3)
18817 ChopTrigMenu.menu.add_radiobutton(label=
"Mux D", variable=ChopTrig, value=4)
18818 ChopTrigMenu.pack(side=LEFT)
18820 SaveMuxmenu = Menubutton(frameCT, text=
"Export csv", width=10, style=
"W17.TButton")
18821 SaveMuxmenu.menu = Menu(ChopTrigMenu, tearoff = 0 )
18822 SaveMuxmenu[
"menu"] = SaveMuxmenu.menu
18823 SaveMuxmenu.menu.add_command(label=
"Save Mux traces", command=BSaveMuxData)
18824 SaveMuxmenu.menu.add_command(label=
"Save single channel", command=BSaveChannelData)
18825 SaveMuxmenu.pack(side=LEFT)
18827 CHBlab.config(style=
"SGray.TButton")
18828 CHBofflab.config(style=
"SGray.TButton")
18831 if ShowBallonHelp > 0:
18832 CHB_Alab_tip =
CreateToolTip(CHB_Alab,
'Select CB-A vertical range/position axis to be used for markers and drawn color')
18833 CHB_Blab_tip =
CreateToolTip(CHB_Blab,
'Select CB-B vertical range/position axis to be used for markers and drawn color')
18834 CHB_Clab_tip =
CreateToolTip(CHB_Clab,
'Select CB-C vertical range/position axis to be used for markers and drawn color')
18835 CHB_Dlab_tip =
CreateToolTip(CHB_Dlab,
'Select CB-D vertical range/position axis to be used for markers and drawn color')
18836 CHB_Aofflab_tip =
CreateToolTip(CHB_Aofflab,
'Set CB-A position to DC average of signal')
18837 CHB_Bofflab_tip =
CreateToolTip(CHB_Bofflab,
'Set CB-B position to DC average of signal')
18838 CHB_Cofflab_tip =
CreateToolTip(CHB_Cofflab,
'Set CB-C position to DC average of signal')
18839 CHB_Dofflab_tip =
CreateToolTip(CHB_Dofflab,
'Set CB-D position to DC average of signal')
18840 ChopTrigMenu_tip =
CreateToolTip(ChopTrigMenu,
'Menu to Select Trigger Source')
18841 RefTraceMenu_tip =
CreateToolTip(RefTraceMenu,
'Menu to Select Mux Reference Traces')
18842 SaveMuxmenu_tip =
CreateToolTip(SaveMuxmenu,
'Menu to Export Mux Trace Data to .csv file')
18845 global AWGAIOMode, AWGBIOMode, ShowC1_V, DualMuxMode, CHAlab, CHAofflab
18846 global CHB_Clab, CHB_Dlab, CHB_Cofflab, CHB_Dofflab, CHB_cbc, CHB_cbd
18848 if DualMuxMode.get() == 1:
18852 CHB_cbc.config(text=
"CA-C")
18853 CHB_cbd.config(text=
"CA-D")
18854 CHB_Clab.config(text=
"CA-C V/Div")
18855 CHB_Dlab.config(text=
"CA-D V/Div")
18856 CHB_Cofflab.config(text=
"CA-C Pos")
18857 CHB_Dofflab.config(text=
"CA-D Pos")
18860 CHAlab.config(style=
"SGray.TButton")
18861 CHAofflab.config(style=
"SGray.TButton")
18864 CHB_cbc.config(text=
"CB-C")
18865 CHB_cbd.config(text=
"CB-D")
18866 CHB_Clab.config(text=
"CB-C V/Div")
18867 CHB_Dlab.config(text=
"CB-D V/Div")
18868 CHB_Cofflab.config(text=
"CB-C Pos")
18869 CHB_Dofflab.config(text=
"CB-D Pos")
18871 CHAlab.config(style=
"Rtrace1.TButton")
18872 CHAofflab.config(style=
"Rtrace1.TButton")
18875 global ChopMuxMode, AWGAIOMode, AWGBIOMode, AWGAMode, AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry
18876 global AWGAPhaseEntry, SAMPLErate, ShowC1_V, ShowC2_V, TgInput
18878 if ChopMuxMode.get() > 0:
18883 AWGAAmplEntry.delete(0,
"end")
18884 AWGAAmplEntry.insert(0,0.5)
18885 AWGAOffsetEntry.delete(0,
"end")
18886 AWGAOffsetEntry.insert(0,4.5)
18887 AWGAFreqEntry.delete(0,
"end")
18888 AWGAFreqEntry.insert(0,SAMPLErate/4)
18889 AWGAPhaseEntry.delete(0,
"end")
18890 AWGAPhaseEntry.insert(0,0)
18897 CHAlab.config(style=
"SGray.TButton")
18898 CHAofflab.config(style=
"SGray.TButton")
18900 CHAlab.config(style=
"Rtrace1.TButton")
18901 CHAofflab.config(style=
"Rtrace1.TButton")
18904 global MuxSync, hipulseimg, lowpulseimg, SyncButton
18906 if MuxSync.get() == 0:
18907 SyncButton.config(image=hipulseimg)
18909 SyncButton.config(image=lowpulseimg)
18912 global muxwindow, awgsync, MuxScreenStatus, CHAlab, CHAofflab, CHBlab, CHBofflab
18913 global ChopTrig, ChopMuxMode, MarkerScale
18915 MuxScreenStatus.set(0)
18916 awgsync.config(state=NORMAL)
18921 CHBlab.config(style=
"Rtrace2.TButton")
18922 CHBofflab.config(style=
"Rtrace2.TButton")
18923 CHAlab.config(style=
"Rtrace1.TButton")
18924 CHAofflab.config(style=
"Rtrace1.TButton")
18925 muxwindow.destroy()
18928 global Bodeca, GRWBP, XOLBP, GRHBP, Y0TBP, CANVASwidthBP, CANVASheightBP, FontSize
18930 CANVASwidthBP = event.width - 4
18931 CANVASheightBP = event.height - 4
18932 GRWBP = CANVASwidthBP - (2 * X0LBP)
18933 GRHBP = CANVASheightBP - int(10 * FontSize)
18937 global FStepSync, DevOne
18939 if FStepSync.get() == 0:
18940 Tval = devx.ctrl_transfer( 0xc0, 0x91, 0, 0, 0, 1, 100)
18941 elif FStepSync.get() == 1:
18942 devx.ctrl_transfer( 0x40, 0x50, 0, 0, 0, 0, 100)
18943 elif FStepSync.get() == 2:
18944 devx.ctrl_transfer( 0x40, 0x51, 0, 0, 0, 0, 100)
18947 global FSweepSync, DevOne
18949 if FSweepSync.get() == 0:
18950 Tval = devx.ctrl_transfer( 0xc0, 0x91, 1, 0, 0, 1, 100)
18951 elif FSweepSync.get() == 1:
18952 devx.ctrl_transfer( 0x40, 0x50, 1, 0, 0, 0, 100)
18953 elif FSweepSync.get() == 2:
18954 devx.ctrl_transfer( 0x40, 0x51, 1, 0, 0, 0, 100)
18957 global BDSweepFile, FileSweepFreq, FileSweepAmpl
18959 if BDSweepFile.get() > 0:
18961 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent = bodewindow)
18963 CSVFile = open(filename)
18964 csv_f = csv.reader(CSVFile)
18969 FileSweepFreq.append(float(row[0]))
18970 FileSweepAmpl.append(float(row[1]))
18972 print(
'skipping non-numeric row')
18973 FileSweepFreq = numpy.array(FileSweepFreq)
18974 FileSweepAmpl = numpy.array(FileSweepAmpl)
18975 MaxAmpl = numpy.amax(FileSweepAmpl)
18977 s = askstring(
"Normalize Max Amplitude",
"Max Amplitude = " + str(MaxAmpl) +
"\n\n Enter New Max value:\n in dB", parent = bodewindow)
18986 NormAmpl = MaxAmpl - v
18989 FileSweepAmpl = FileSweepAmpl - NormAmpl
18991 StopBodeEntry.delete(0,
"end")
18992 StopBodeEntry.insert(0,FileSweepFreq[len(FileSweepFreq)-1])
18993 StartBodeEntry.delete(0,
"end")
18994 StartBodeEntry.insert(0,FileSweepFreq[0])
18995 SweepStepBodeEntry.delete(0,
"end")
18996 SweepStepBodeEntry.insert(0,len(FileSweepFreq))
18998 showwarning(
"WARNING",
"No such file found or wrong format!", parent = bodewindow)
19002 global logo, SmoothCurvesBP, CutDC, bodewindow, SWRev
19003 global CANVASwidthBP, CANVASheightBP, FFTwindow, CutDC, AWGAMode, AWGAShape, AWGBMode
19004 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMarkerBP, BodeDisp, RelPhaseCenter
19005 global ShowCA_RdB, ShowCA_RP, ShowCB_RdB, ShowCB_RP, ShowMathBP, ShowRMathBP, PhCenBodeEntry
19006 global BPSweepMode, BPSweepCont, Bodeca, BodeScreenStatus, RevDate, SweepStepBodeEntry
19007 global HScaleBP, StopBodeEntry, StartBodeEntry, ShowBPCur, ShowBdBCur, BPCursor, BdBCursor
19008 global GRWBP, GRHBP, X0LBP, FStepSync, FSweepSync, BDSweepFile, MinigenScreenStatus
19009 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle, ImpedanceCenter, ImCenBodeEntry
19010 global Show_RseriesRef, Show_XseriesRef, Show_MagnitudeRef, Show_AngleRef
19011 global FrameRefief, BorderSize, LocalLanguage
19012 global sbode_tip, rbode_tip, bd3_tip, bd4_tip, bd5_tip, bd6_tip, bd7_tip, bd8_tip, bodismiss1button_tip
19013 global bstopfreqlab, bstartfreqlab, ImCenlab, BPhCenlab
19015 if BodeScreenStatus.get() == 0:
19016 BodeScreenStatus.set(1)
19019 CANVASwidthBP = GRWBP + 2 * X0LBP
19020 CANVASheightBP = GRHBP + 80
19025 bodewindow = Toplevel()
19026 bodewindow.title(
"Bode Plotter " + SWRev + RevDate)
19027 bodewindow.protocol(
"WM_DELETE_WINDOW", DestroyBodeScreen)
19028 frame2bp = Frame(bodewindow, borderwidth=BorderSize, relief=FrameRefief)
19029 frame2bp.pack(side=RIGHT, expand=NO, fill=BOTH)
19031 frame2b = Frame(bodewindow, borderwidth=BorderSize, relief=FrameRefief)
19032 frame2b.pack(side=TOP, expand=YES, fill=BOTH)
19034 Bodeca = Canvas(frame2b, width=CANVASwidthBP, height=CANVASheightBP, background=COLORcanvas, cursor=
'cross')
19035 Bodeca.bind(
'<Configure>', BodeCaresize)
19036 Bodeca.bind(
'<1>', onCanvasBodeLeftClick)
19037 Bodeca.bind(
'<3>', onCanvasBodeRightClick)
19038 Bodeca.bind(
"<Up>", onCanvasUpArrow)
19039 Bodeca.bind(
"<Down>", onCanvasDownArrow)
19040 Bodeca.bind(
"<Left>", onCanvasLeftArrow)
19041 Bodeca.bind(
"<Right>", onCanvasRightArrow)
19042 Bodeca.bind(
"<space>", onCanvasSpaceBar)
19043 Bodeca.bind(
"1", onCanvasBdOne)
19044 Bodeca.bind(
"2", onCanvasBdTwo)
19045 Bodeca.bind(
"3", onCanvasBdThree)
19046 Bodeca.bind(
"4", onCanvasBdFour)
19047 Bodeca.bind(
"5", onCanvasBdFive)
19048 Bodeca.bind(
"6", onCanvasBdSix)
19049 Bodeca.bind(
"7", onCanvasBdSeven)
19050 Bodeca.bind(
"8", onCanvasBdEight)
19051 Bodeca.bind(
"9", onCanvasBdNine)
19052 Bodeca.bind(
"0", onCanvasBdZero)
19053 Bodeca.bind(
"f", onCanvasShowBPcur)
19054 Bodeca.bind(
"d", onCanvasShowBdBcur)
19055 Bodeca.bind(
"h", onCanvasShowPdBcur)
19056 Bodeca.bind(
"s", onCanvasBdSnap)
19057 Bodeca.pack(side=TOP, expand=YES, fill=BOTH)
19060 dropmenu = Frame( frame2bp )
19061 dropmenu.pack(side=TOP)
19063 BodeFilemenu = Menubutton(dropmenu, text=
"File", style=
"W5.TButton")
19064 BodeFilemenu.menu = Menu(BodeFilemenu, tearoff = 0 )
19065 BodeFilemenu[
"menu"] = BodeFilemenu.menu
19066 BodeFilemenu.menu.add_command(label=
"Save Config", command=BSaveConfigBP)
19067 BodeFilemenu.menu.add_command(label=
"Load Config", command=BLoadConfigBP)
19068 BodeFilemenu.menu.add_command(label=
"Run Script", command=RunScript)
19069 BodeFilemenu.menu.add_command(label=
"Save Screen", command=BSaveScreenBP)
19070 BodeFilemenu.menu.add_command(label=
"Save Data", command=BCSVfile)
19071 BodeFilemenu.pack(side=LEFT, anchor=W)
19073 BodeOptionmenu = Menubutton(dropmenu, text=
"Options", style=
"W8.TButton")
19074 BodeOptionmenu.menu = Menu(BodeOptionmenu, tearoff = 0 )
19075 BodeOptionmenu[
"menu"] = BodeOptionmenu.menu
19076 BodeOptionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
19077 BodeOptionmenu.menu.add_checkbutton(label=
'Smooth', variable=SmoothCurvesBP)
19078 BodeOptionmenu.menu.add_checkbutton(label=
'Cut-DC', variable=CutDC)
19079 BodeOptionmenu.menu.add_command(label=
"Store trace (s)", command=BSTOREtraceBP)
19080 BodeOptionmenu.menu.add_radiobutton(label=
'Black BG', variable=ColorMode, value=0, command=BgColor)
19081 BodeOptionmenu.menu.add_radiobutton(label=
'White BG', variable=ColorMode, value=1, command=BgColor)
19082 BodeOptionmenu.menu.add_command(label=
"-Step Sync Pulse-", command=donothing)
19083 BodeOptionmenu.menu.add_radiobutton(label=
'None', variable=FStepSync, value=0, command=BStepSync)
19084 BodeOptionmenu.menu.add_radiobutton(label=
'Rising', variable=FStepSync, value=1, command=BStepSync)
19085 BodeOptionmenu.menu.add_radiobutton(label=
'Falling', variable=FStepSync, value=2, command=BStepSync)
19086 BodeOptionmenu.menu.add_command(label=
"-Sweep Sync Pulse-", command=donothing)
19087 BodeOptionmenu.menu.add_radiobutton(label=
'None', variable=FSweepSync, value=0, command=BSweepSync)
19088 BodeOptionmenu.menu.add_radiobutton(label=
'Rising', variable=FSweepSync, value=1, command=BSweepSync)
19089 BodeOptionmenu.menu.add_radiobutton(label=
'Falling', variable=FSweepSync, value=2, command=BSweepSync)
19090 BodeOptionmenu.pack(side=LEFT, anchor=W)
19092 RUNframe = Frame( frame2bp )
19093 RUNframe.pack(side=TOP)
19094 rbode = Button(RUNframe, text=
"Run", style=
"Run.TButton", command=BStartBP)
19095 rbode.pack(side=LEFT)
19096 sbode = Button(RUNframe, text=
"Stop", style=
"Stop.TButton", command=BStopBP)
19097 sbode.pack(side=LEFT)
19099 BodeFFTwindmenu = Menubutton(frame2bp, text=
"FFTwindow", style=
"W11.TButton")
19100 BodeFFTwindmenu.menu = Menu(BodeFFTwindmenu, tearoff = 0 )
19101 BodeFFTwindmenu[
"menu"] = BodeFFTwindmenu.menu
19102 BodeFFTwindmenu.menu.add_radiobutton(label=
'Rectangular window (B=1)', variable=FFTwindow, value=0)
19103 BodeFFTwindmenu.menu.add_radiobutton(label=
'Cosine window (B=1.24)', variable=FFTwindow, value=1)
19104 BodeFFTwindmenu.menu.add_radiobutton(label=
'Triangular window (B=1.33)', variable=FFTwindow, value=2)
19105 BodeFFTwindmenu.menu.add_radiobutton(label=
'Hann window (B=1.5)', variable=FFTwindow, value=3)
19106 BodeFFTwindmenu.menu.add_radiobutton(label=
'Blackman window (B=1.73)', variable=FFTwindow, value=4)
19107 BodeFFTwindmenu.menu.add_radiobutton(label=
'Nuttall window (B=2.02)', variable=FFTwindow, value=5)
19108 BodeFFTwindmenu.menu.add_radiobutton(label=
'Flat top window (B=3.77)', variable=FFTwindow, value=6)
19109 BodeFFTwindmenu.menu.add_radiobutton(label=
'User Defined window', variable=FFTwindow, value=7)
19110 BodeFFTwindmenu.menu.add_command(label=
"Enter User function", command=BUserFFTwindow)
19111 BodeFFTwindmenu.menu.add_radiobutton(label=
'FFT Window from file', variable=FFTwindow, value=8, command=BFileFFTwindow)
19112 BodeFFTwindmenu.pack(side=TOP)
19114 tracemenu = Frame( frame2bp )
19115 tracemenu.pack(side=TOP)
19118 BodeShowmenu = Menubutton(tracemenu, text=
"Curves", style=
"W7.TButton")
19119 BodeShowmenu.menu = Menu(BodeShowmenu, tearoff = 0 )
19120 BodeShowmenu[
"menu"] = BodeShowmenu.menu
19121 BodeShowmenu.menu.add_command(label=
"-Show-", command=donothing)
19122 BodeShowmenu.menu.add_command(label=
"All", command=BShowCurvesAllBP)
19123 BodeShowmenu.menu.add_command(label=
"None", command=BShowCurvesNoneBP)
19124 BodeShowmenu.menu.add_checkbutton(label=
'CA-dBV (1)', variable=ShowCA_VdB, command=UpdateBodeAll)
19125 BodeShowmenu.menu.add_checkbutton(label=
'CB-dBV (2)', variable=ShowCB_VdB, command=UpdateBodeAll)
19126 BodeShowmenu.menu.add_checkbutton(label=
'Phase A-B (3)', variable=ShowCA_P, command=UpdateBodeAll)
19127 BodeShowmenu.menu.add_checkbutton(label=
'Phase B-A (4)', variable=ShowCB_P, command=UpdateBodeAll)
19128 BodeShowmenu.menu.add_command(label=
"-Math-", command=donothing)
19129 BodeShowmenu.menu.add_radiobutton(label=
'None (0)', variable=ShowMathBP, value=0, command=UpdateBodeAll)
19130 BodeShowmenu.menu.add_radiobutton(label=
'CA-dB - CB-dB (9)', variable=ShowMathBP, value=1, command=UpdateBodeAll)
19131 BodeShowmenu.menu.add_radiobutton(label=
'CB-dB - CA-dB (8)', variable=ShowMathBP, value=2, command=UpdateBodeAll)
19132 BodeShowmenu.menu.add_command(label=
"-Impedance-", command=donothing)
19133 BodeShowmenu.menu.add_checkbutton(label=
'Series R', variable=Show_Rseries, command=UpdateBodeAll)
19134 BodeShowmenu.menu.add_checkbutton(label=
'Series X', variable=Show_Xseries, command=UpdateBodeAll)
19135 BodeShowmenu.menu.add_checkbutton(label=
'Series Mag', variable= Show_Magnitude, command=UpdateBodeAll)
19136 BodeShowmenu.menu.add_checkbutton(label=
'Series Ang', variable=Show_Angle, command=UpdateBodeAll)
19137 BodeShowmenu.menu.add_separator()
19138 BodeShowmenu.menu.add_checkbutton(label=
'RA-dBV (6)', variable=ShowCA_RdB, command=UpdateBodeAll)
19139 BodeShowmenu.menu.add_checkbutton(label=
'RB-dBV (7)', variable=ShowCB_RdB, command=UpdateBodeAll)
19140 BodeShowmenu.menu.add_checkbutton(label=
'RPhase A-B', variable=ShowCA_RP, command=UpdateBodeAll)
19141 BodeShowmenu.menu.add_checkbutton(label=
'RPhase B-A', variable=ShowCB_RP, command=UpdateBodeAll)
19142 BodeShowmenu.menu.add_checkbutton(label=
'Math', variable=ShowRMathBP, command=UpdateBodeAll)
19143 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series R', variable=Show_RseriesRef, command=UpdateBodeAll)
19144 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series X', variable=Show_XseriesRef, command=UpdateBodeAll)
19145 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series Mag', variable=Show_MagnitudeRef, command=UpdateBodeAll)
19146 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series Ang', variable=Show_AngleRef, command=UpdateBodeAll)
19147 BodeShowmenu.pack(side=LEFT, anchor=W)
19149 BodeMarkmenu = Menubutton(tracemenu, text=
"Cursors", style=
"W7.TButton")
19150 BodeMarkmenu.menu = Menu(BodeMarkmenu, tearoff = 0 )
19151 BodeMarkmenu[
"menu"] = BodeMarkmenu.menu
19152 BodeMarkmenu.menu.add_command(label=
"-Cursors&Markers-", command=donothing)
19153 BodeMarkmenu.menu.add_checkbutton(label=
'Marker (5)', variable=ShowMarkerBP, command=UpdateBodeAll)
19154 BodeMarkmenu.menu.add_checkbutton(label=
'Freq Cursor', variable=ShowBPCur)
19155 BodeMarkmenu.menu.add_checkbutton(label=
'dB Cursor', variable=ShowBdBCur)
19156 BodeMarkmenu.menu.add_radiobutton(label=
'Cursor Off', variable=ShowBdBCur, value=0)
19157 BodeMarkmenu.menu.add_radiobutton(label=
'dB Cursor (d)', variable=ShowBdBCur, value=1)
19158 BodeMarkmenu.menu.add_radiobutton(label=
'Phase Cursor (h)', variable=ShowBdBCur, value=2)
19159 BodeMarkmenu.menu.add_checkbutton(label=
'Freq Cursor (f)', variable=ShowBPCur)
19160 BodeMarkmenu.pack(side=LEFT, anchor=W)
19163 HzScale = Frame( frame2bp )
19164 HzScale.pack(side=TOP)
19165 brb1 = Radiobutton(HzScale, text=
"Lin F", variable=HScaleBP, value=0, command=UpdateBodeTrace )
19166 brb1.pack(side=LEFT)
19167 brb2 = Radiobutton(HzScale, text=
"Log F", variable=HScaleBP, value=1, command=UpdateBodeTrace )
19168 brb2.pack(side=LEFT)
19170 DBrange = Frame( frame2bp )
19171 DBrange.pack(side=TOP)
19172 bd3 = Button(DBrange, text=
"+dB/div", style=
"W8.TButton", command=BDBdiv2BP)
19173 bd3.pack(side=LEFT)
19174 bd4 = Button(DBrange, text=
"-dB/div", style=
"W8.TButton", command=BDBdiv1BP)
19175 bd4.pack(side=LEFT)
19177 LVBrange = Frame( frame2bp )
19178 LVBrange.pack(side=TOP)
19179 bd5 = Button(LVBrange, text=
"LVL+10", style=
"W8.TButton", command=Blevel4BP)
19180 bd5.pack(side=LEFT)
19181 bd6 = Button(LVBrange, text=
"LVL-10", style=
"W8.TButton", command=Blevel3BP)
19182 bd6.pack(side=LEFT)
19184 LVSrange = Frame( frame2bp )
19185 LVSrange.pack(side=TOP)
19186 bd7 = Button(LVSrange, text=
"LVL+1", style=
"W8.TButton", command=Blevel2BP)
19187 bd7.pack(side=LEFT)
19188 bd8 = Button(LVSrange, text=
"LVL-1", style=
"W8.TButton", command=Blevel1BP)
19189 bd8.pack(side=LEFT)
19191 PhaseCenter = Frame( frame2bp )
19192 PhaseCenter.pack(side=TOP)
19193 BPhCenlab = Label(PhaseCenter, text=
"Center Phase on")
19194 BPhCenlab.pack(side=LEFT)
19195 PhCenBodeEntry = Entry(PhaseCenter, width=5, cursor=
'double_arrow')
19196 PhCenBodeEntry.bind(
'<Return>', onTextKey)
19197 PhCenBodeEntry.bind(
'<MouseWheel>', onTextScroll)
19198 PhCenBodeEntry.bind(
"<Button-4>", onTextScroll)
19199 PhCenBodeEntry.bind(
"<Button-5>", onTextScroll)
19200 PhCenBodeEntry.bind(
'<Key>', onTextKey)
19201 PhCenBodeEntry.pack(side=LEFT)
19202 PhCenBodeEntry.delete(0,
"end")
19203 PhCenBodeEntry.insert(0,RelPhaseCenter.get())
19205 ImpedCenter = Frame( frame2bp )
19206 ImpedCenter.pack(side=TOP)
19207 ImCenlab = Label(ImpedCenter, text=
"Center Imped on")
19208 ImCenlab.pack(side=LEFT)
19209 ImCenBodeEntry = Entry(ImpedCenter, width=5, cursor=
'double_arrow')
19210 ImCenBodeEntry.bind(
'<Return>', onTextKey)
19211 ImCenBodeEntry.bind(
'<MouseWheel>', onTextScroll)
19212 ImCenBodeEntry.bind(
"<Button-4>", onTextScroll)
19213 ImCenBodeEntry.bind(
"<Button-5>", onTextScroll)
19214 ImCenBodeEntry.bind(
'<Key>', onTextKey)
19215 ImCenBodeEntry.pack(side=LEFT)
19216 ImCenBodeEntry.delete(0,
"end")
19217 ImCenBodeEntry.insert(0,ImpedanceCenter.get())
19219 FSweepmenu = Label(frame2bp, text=
"-Sweep Gen-", style=
"A10B.TLabel")
19220 FSweepmenu.pack(side=TOP)
19222 Frange1 = Frame( frame2bp )
19223 Frange1.pack(side=TOP)
19224 bstartfreqlab = Label(Frange1, text=
"Start Freq")
19225 bstartfreqlab.pack(side=LEFT)
19226 StartBodeEntry = Entry(Frange1, width=5, cursor=
'double_arrow')
19227 StartBodeEntry.bind(
'<Return>', onTextKey)
19228 StartBodeEntry.bind(
'<MouseWheel>', onTextScroll)
19229 StartBodeEntry.bind(
"<Button-4>", onTextScroll)
19230 StartBodeEntry.bind(
"<Button-5>", onTextScroll)
19231 StartBodeEntry.bind(
'<Key>', onTextKey)
19232 StartBodeEntry.pack(side=LEFT)
19233 StartBodeEntry.delete(0,
"end")
19234 StartBodeEntry.insert(0,10)
19236 Frange2 = Frame( frame2bp )
19237 Frange2.pack(side=TOP)
19238 bstopfreqlab = Label(Frange2, text=
"Stop Freq")
19239 bstopfreqlab.pack(side=LEFT)
19240 StopBodeEntry = Entry(Frange2, width=5, cursor=
'double_arrow')
19241 StopBodeEntry.bind(
'<Return>', onTextKey)
19242 StopBodeEntry.bind(
'<MouseWheel>', onStopBodeScroll)
19243 StopBodeEntry.bind(
"<Button-4>", onTextScroll)
19244 StopBodeEntry.bind(
"<Button-5>", onTextScroll)
19245 StopBodeEntry.bind(
'<Key>', onTextKey)
19246 StopBodeEntry.pack(side=LEFT)
19247 StopBodeEntry.delete(0,
"end")
19248 StopBodeEntry.insert(0,10000)
19250 sgrb1 = Radiobutton(frame2bp, text=
'None', variable=FSweepMode, value=0)
19251 sgrb1.pack(side=TOP)
19252 Frange4 = Frame( frame2bp )
19253 Frange4.pack(side=TOP)
19254 sgrb2 = Radiobutton(Frange4, text=
'CH-A', variable=FSweepMode, value=1)
19255 sgrb2.pack(side=LEFT)
19256 sgrb3 = Radiobutton(Frange4, text=
'CH-B', variable=FSweepMode, value=2)
19257 sgrb3.pack(side=LEFT)
19258 if MinigenScreenStatus.get() > 0:
19259 sgrb1 = Radiobutton(frame2bp, text=
'MinGen', variable=FSweepMode, value=3)
19260 sgrb1.pack(side=TOP)
19261 ffcb = Checkbutton(frame2bp, text=
'Sweep From File', variable=BDSweepFile, command=BDSweepFromFile)
19262 ffcb.pack(side=TOP)
19263 Frange3 = Frame( frame2bp )
19264 Frange3.pack(side=TOP)
19265 sweepsteplab = Label(Frange3, text=
"Sweep Steps")
19266 sweepsteplab.pack(side=LEFT)
19267 SweepStepBodeEntry = Entry(Frange3, width=5, cursor=
'double_arrow')
19268 SweepStepBodeEntry.bind(
'<Return>', onTextKey)
19269 SweepStepBodeEntry.bind(
'<MouseWheel>', onTextScroll)
19270 SweepStepBodeEntry.bind(
"<Button-4>", onTextScroll)
19271 SweepStepBodeEntry.bind(
"<Button-5>", onTextScroll)
19272 SweepStepBodeEntry.bind(
'<Key>', onTextKey)
19273 SweepStepBodeEntry.pack(side=LEFT)
19274 SweepStepBodeEntry.delete(0,
"end")
19275 SweepStepBodeEntry.insert(0,100)
19277 sgrb5 = Radiobutton(frame2bp, text=
'Single', variable=FSweepCont, value=0)
19278 sgrb5.pack(side=TOP)
19279 sgrb6 = Radiobutton(frame2bp, text=
'Continuous', variable=FSweepCont, value=1)
19280 sgrb6.pack(side=TOP)
19281 Plotsframe = Frame( frame2bp )
19282 Plotsframe.pack(side=TOP)
19283 nyquistplotbutton = Button(Plotsframe, text=
"Polar Plot", style=
"W9.TButton", command=MakeNyquistPlot)
19284 nyquistplotbutton.pack(side=LEFT)
19285 nicholsplotbutton = Button(Plotsframe, text=
"Rect Plot", style=
"W8.TButton", command=MakeNicPlot)
19286 nicholsplotbutton.pack(side=LEFT)
19287 bodismiss1button = Button(frame2bp, text=
"Dismiss", style=
"W8.TButton", command=DestroyBodeScreen)
19288 bodismiss1button.pack(side=TOP)
19290 ADI2 = Label(frame2bp, image=logo, anchor=
"sw", compound=
"top")
19291 ADI2.pack(side=TOP)
19292 if ShowBallonHelp > 0:
19297 bd5_tip =
CreateToolTip(bd5,
'Increase Ref Level by 10 dB')
19298 bd6_tip =
CreateToolTip(bd6,
'Decrease Ref Level by 10 dB')
19301 bodismiss1button_tip =
CreateToolTip(bodismiss1button,
'Dismiss Bode Plot window')
19302 if LocalLanguage !=
"English":
19306 global bodewindow, BodeScreenStatus, ca, FSweepMode
19308 BodeScreenStatus.set(0)
19312 bodewindow.destroy()
19313 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
19316 global Freqca, GRWF, XOLF, GRHF, Y0TF, CANVASwidthF, CANVASheightF, FontSize
19318 CANVASwidthF = event.width - 4
19319 CANVASheightF = event.height - 4
19320 GRWF = CANVASwidthF - 10 - (2 * X0LF)
19321 GRHF = CANVASheightF - int(10 * FontSize)
19326 global logo, SmoothCurvesSA, CutDC, SingleShotSA, FFTwindow, freqwindow, SmoothCurvesSA
19327 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMarker, FreqDisp, ShowAWGASA
19328 global ShowRA_VdB, ShowRA_P, ShowRB_VdB, ShowRB_P, ShowMathSA, SWRev, SingleShotSA, ShowAWGBSA
19329 global ShowRMath, FSweepMode, FSweepCont, Freqca, SpectrumScreenStatus, RevDate, AWGShowAdvanced
19330 global HScale, StopFreqEntry, StartFreqEntry, ShowFCur, ShowdBCur, FCursor, dBCursor
19331 global CANVASwidthF, GRWF, X0LF, CANVASheightF, GRHF, FontSize, PhCenFreqEntry, RelPhaseCenter
19332 global FrameRefief, BorderSize, LocalLanguage, SAVScale, SAVPSD, SAvertmaxEntry, SAvertminEntry
19333 global sb_tip, rb_tip, bless_tip, bmore_tip, b3_tip, b4_tip, b5_tip, b6_tip, b7_tip, b8_tip, sadismiss1button_tip
19334 global SAMagdiv, SAVScale, SAvertmaxEntry, SAvertminEntry, SAVPSD
19336 if SpectrumScreenStatus.get() == 0:
19337 SpectrumScreenStatus.set(1)
19340 CANVASwidthF = GRWF + 10 + 2 * X0LF
19341 CANVASheightF = GRHF + int(10 * FontSize)
19342 freqwindow = Toplevel()
19343 freqwindow.title(
"Spectrum Analyzer " + SWRev + RevDate)
19344 freqwindow.protocol(
"WM_DELETE_WINDOW", DestroySpectrumScreen)
19345 frame2fr = Frame(freqwindow, borderwidth=BorderSize, relief=FrameRefief)
19346 frame2fr.pack(side=RIGHT, expand=NO, fill=BOTH)
19348 frame2f = Frame(freqwindow, borderwidth=BorderSize, relief=FrameRefief)
19349 frame2f.pack(side=TOP, expand=YES, fill=BOTH)
19351 Freqca = Canvas(frame2f, width=CANVASwidthF, height=CANVASheightF, background=COLORcanvas, cursor=
'cross')
19352 Freqca.bind(
'<Configure>', FreqCaresize)
19353 Freqca.bind(
'<1>', onCanvasFreqLeftClick)
19354 Freqca.bind(
'<3>', onCanvasFreqRightClick)
19355 Freqca.bind(
"<Up>", onCanvasUpArrow)
19356 Freqca.bind(
"<Down>", onCanvasDownArrow)
19357 Freqca.bind(
"<Left>", onCanvasLeftArrow)
19358 Freqca.bind(
"<Right>", onCanvasRightArrow)
19359 Freqca.bind(
"<space>", onCanvasSpaceBar)
19360 Freqca.bind(
"1", onCanvasSAOne)
19361 Freqca.bind(
"2", onCanvasSATwo)
19362 Freqca.bind(
"3", onCanvasSAThree)
19363 Freqca.bind(
"4", onCanvasSAFour)
19364 Freqca.bind(
"5", onCanvasSAFive)
19365 Freqca.bind(
"6", onCanvasSASix)
19366 Freqca.bind(
"7", onCanvasSASeven)
19367 Freqca.bind(
"8", onCanvasSAEight)
19368 Freqca.bind(
"9", onCanvasSANine)
19369 Freqca.bind(
"0", onCanvasSAZero)
19370 Freqca.bind(
"a", onCanvasSAAverage)
19371 Freqca.bind(
"n", onCanvasSANormal)
19372 Freqca.bind(
"p", onCanvasSAPeak)
19373 Freqca.bind(
"r", onCanvasSAReset)
19374 Freqca.bind(
"f", onCanvasShowFcur)
19375 Freqca.bind(
"d", onCanvasShowdBcur)
19376 Freqca.bind(
"h", onCanvasShowPcur)
19377 Freqca.bind(
"s", onCanvasSASnap)
19378 Freqca.pack(side=TOP, expand=YES, fill=BOTH)
19380 dropmenu = Frame( frame2fr )
19381 dropmenu.pack(side=TOP)
19383 SAFilemenu = Menubutton(dropmenu, text=
"File", style=
"W5.TButton")
19384 SAFilemenu.menu = Menu(SAFilemenu, tearoff = 0 )
19385 SAFilemenu[
"menu"] = SAFilemenu.menu
19386 SAFilemenu.menu.add_command(label=
"Save Config", command=BSaveConfigSA)
19387 SAFilemenu.menu.add_command(label=
"Load Config", command=BLoadConfigSA)
19388 SAFilemenu.menu.add_command(label=
"Run Script", command=RunScript)
19389 SAFilemenu.menu.add_command(label=
"Save Screen", command=BSaveScreenSA)
19390 SAFilemenu.menu.add_command(label=
"Save Data", command=STOREcsvfile)
19391 SAFilemenu.pack(side=LEFT, anchor=W)
19393 SAOptionmenu = Menubutton(dropmenu, text=
"Options", style=
"W8.TButton")
19394 SAOptionmenu.menu = Menu(SAOptionmenu, tearoff = 0 )
19395 SAOptionmenu[
"menu"] = SAOptionmenu.menu
19396 SAOptionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
19397 SAOptionmenu.menu.add_command(label=
'Set Sample Rate', command=MakeSampleRateMenu)
19398 SAOptionmenu.menu.add_checkbutton(label=
'Smooth', variable=SmoothCurvesSA)
19399 SAOptionmenu.menu.add_checkbutton(label=
'Cut-DC', variable=CutDC)
19400 SAOptionmenu.menu.add_command(label=
"Store trace [s]", command=BSTOREtraceSA)
19401 SAOptionmenu.menu.add_radiobutton(label=
'Black BG', variable=ColorMode, value=0, command=BgColor)
19402 SAOptionmenu.menu.add_radiobutton(label=
'White BG', variable=ColorMode, value=1, command=BgColor)
19403 SAOptionmenu.pack(side=LEFT, anchor=W)
19405 RUNframe = Frame( frame2fr )
19406 RUNframe.pack(side=TOP)
19407 sarb = Button(RUNframe, text=
"Run", style=
"Run.TButton", command=BStartSA)
19408 sarb.pack(side=LEFT)
19409 sasb = Button(RUNframe, text=
"Stop", style=
"Stop.TButton", command=BStopSA)
19410 sasb.pack(side=LEFT)
19412 Modeframe = Frame( frame2fr )
19413 Modeframe.pack(side=TOP)
19414 Modemenu = Menubutton(Modeframe, text=
"Mode", style=
"W5.TButton")
19415 Modemenu.menu = Menu(Modemenu, tearoff = 0 )
19416 Modemenu[
"menu"] = Modemenu.menu
19417 Modemenu.menu.add_command(label=
"Normal mode [n]", command=BNormalmode)
19418 Modemenu.menu.add_command(label=
"Peak hold [p]", command=BPeakholdmode)
19419 Modemenu.menu.add_command(label=
"Average [a]", command=BAveragemode)
19420 Modemenu.menu.add_command(label=
"Reset Average [r]", command=BResetFreqAvg)
19421 Modemenu.menu.add_checkbutton(label=
'SingleShot', variable=SingleShotSA)
19422 Modemenu.pack(side=LEFT)
19424 SAFFTwindmenu = Menubutton(Modeframe, text=
"FFTwindow", style=
"W11.TButton")
19425 SAFFTwindmenu.menu = Menu(SAFFTwindmenu, tearoff = 0 )
19426 SAFFTwindmenu[
"menu"] = SAFFTwindmenu.menu
19427 SAFFTwindmenu.menu.add_radiobutton(label=
'Rectangular window (B=1)', variable=FFTwindow, value=0)
19428 SAFFTwindmenu.menu.add_radiobutton(label=
'Cosine window (B=1.24)', variable=FFTwindow, value=1)
19429 SAFFTwindmenu.menu.add_radiobutton(label=
'Triangular window (B=1.33)', variable=FFTwindow, value=2)
19430 SAFFTwindmenu.menu.add_radiobutton(label=
'Hann window (B=1.5)', variable=FFTwindow, value=3)
19431 SAFFTwindmenu.menu.add_radiobutton(label=
'Blackman window (B=1.73)', variable=FFTwindow, value=4)
19432 SAFFTwindmenu.menu.add_radiobutton(label=
'Nuttall window (B=2.02)', variable=FFTwindow, value=5)
19433 SAFFTwindmenu.menu.add_radiobutton(label=
'Flat top window (B=3.77)', variable=FFTwindow, value=6)
19434 SAFFTwindmenu.menu.add_radiobutton(label=
'User Defined window', variable=FFTwindow, value=7)
19435 SAFFTwindmenu.menu.add_command(label=
"Enter User function", command=BUserFFTwindow)
19436 SAFFTwindmenu.menu.add_radiobutton(label=
'FFT Window from file', variable=FFTwindow, value=8, command=BFileFFTwindow)
19437 SAFFTwindmenu.pack(side=LEFT)
19439 SamplesMenu = Frame( frame2fr )
19440 SamplesMenu.pack(side=TOP)
19441 bless = Button(SamplesMenu, text=
"-Samples", style=
"W8.TButton", command=Bsamples1)
19442 bless.pack(side=LEFT)
19443 bmore = Button(SamplesMenu, text=
"+Samples", style=
"W8.TButton", command=Bsamples2)
19444 bmore.pack(side=LEFT)
19448 MarkersMenu = Frame( frame2fr )
19449 MarkersMenu.pack(side=TOP)
19450 SAShowmenu = Menubutton(MarkersMenu, text=
"Curves", style=
"W7.TButton")
19451 SAShowmenu.menu = Menu(SAShowmenu, tearoff = 0 )
19452 SAShowmenu[
"menu"] = SAShowmenu.menu
19453 SAShowmenu.menu.add_command(label=
"-Show-", command=donothing)
19454 SAShowmenu.menu.add_command(label=
"All", command=BShowCurvesAllSA)
19455 SAShowmenu.menu.add_command(label=
"None", command=BShowCurvesNoneSA)
19456 SAShowmenu.menu.add_checkbutton(label=
'CA-dBV [1]', variable=ShowC1_VdB, command=UpdateFreqAll)
19457 SAShowmenu.menu.add_checkbutton(label=
'CB-dBV [2]', variable=ShowC2_VdB, command=UpdateFreqAll)
19458 SAShowmenu.menu.add_checkbutton(label=
'Phase A-B [3]', variable=ShowC1_P, command=UpdateFreqAll)
19459 SAShowmenu.menu.add_checkbutton(label=
'Phase B-A [4]', variable=ShowC2_P, command=UpdateFreqAll)
19460 SAShowmenu.menu.add_command(label=
"-Math-", command=donothing)
19461 SAShowmenu.menu.add_radiobutton(label=
'None [0]', variable=ShowMathSA, value=0, command=UpdateFreqAll)
19462 SAShowmenu.menu.add_radiobutton(label=
'CA-dB - CB-dB [9]', variable=ShowMathSA, value=1, command=UpdateFreqAll)
19463 SAShowmenu.menu.add_radiobutton(label=
'CB-dB - CA-dB [8]', variable=ShowMathSA, value=2, command=UpdateFreqAll)
19464 if AWGShowAdvanced.get() > 0:
19465 SAShowmenu.menu.add_command(label=
"-AWG-", command=donothing)
19466 SAShowmenu.menu.add_checkbutton(label=
'AWG A', variable=ShowAWGASA, command=UpdateFreqAll)
19467 SAShowmenu.menu.add_checkbutton(label=
'AWG B', variable=ShowAWGBSA, command=UpdateFreqAll)
19468 SAShowmenu.menu.add_command(label=
"-Ref Trace-", command=donothing)
19469 SAShowmenu.menu.add_checkbutton(label=
'RA-dBV [6]', variable=ShowRA_VdB, command=UpdateFreqAll)
19470 SAShowmenu.menu.add_checkbutton(label=
'RB-dBV [7]', variable=ShowRB_VdB, command=UpdateFreqAll)
19471 SAShowmenu.menu.add_checkbutton(label=
'RPhase A-B', variable=ShowRA_P, command=UpdateFreqAll)
19472 SAShowmenu.menu.add_checkbutton(label=
'RPhase B-A', variable=ShowRB_P, command=UpdateFreqAll)
19473 SAShowmenu.menu.add_checkbutton(label=
'Ref Math', variable=ShowRMath, command=UpdateFreqAll)
19474 SAShowmenu.pack(side=LEFT)
19475 SACursormenu = Menubutton(MarkersMenu, text=
"Cursors", style=
"W7.TButton")
19476 SACursormenu.menu = Menu(SACursormenu, tearoff = 0 )
19477 SACursormenu[
"menu"] = SACursormenu.menu
19478 SACursormenu.menu.add_command(label=
"-Marker-", command=donothing)
19479 SACursormenu.menu.add_radiobutton(label=
'Markers Off', variable=ShowMarker, value=0, command=UpdateFreqAll)
19480 SACursormenu.menu.add_radiobutton(label=
'Markers [5]', variable=ShowMarker, value=1, command=UpdateFreqAll)
19481 SACursormenu.menu.add_radiobutton(label=
'Delta Markers', variable=ShowMarker, value=2, command=UpdateFreqAll)
19482 SACursormenu.menu.add_command(label=
"-Cursors-", command=donothing)
19483 SACursormenu.menu.add_radiobutton(label=
'Cursor Off', variable=ShowdBCur, value=0)
19484 SACursormenu.menu.add_radiobutton(label=
'dB Cursor [d]', variable=ShowdBCur, value=1)
19486 SACursormenu.menu.add_checkbutton(label=
'Freq Cursor [f]', variable=ShowFCur)
19487 SACursormenu.pack(side=LEFT)
19489 Frange1 = Frame( frame2fr )
19490 Frange1.pack(side=TOP)
19491 startfreqlab = Label(Frange1, text=
"Startfreq")
19492 startfreqlab.pack(side=LEFT)
19493 StartFreqEntry = Entry(Frange1, width=5, cursor=
'double_arrow')
19494 StartFreqEntry.bind(
'<Return>', onTextKey)
19495 StartFreqEntry.bind(
'<MouseWheel>', onTextScroll)
19496 StartFreqEntry.bind(
"<Button-4>", onTextScroll)
19497 StartFreqEntry.bind(
"<Button-5>", onTextScroll)
19498 StartFreqEntry.bind(
'<Key>', onTextKey)
19499 StartFreqEntry.pack(side=LEFT)
19500 StartFreqEntry.delete(0,
"end")
19501 StartFreqEntry.insert(0,10)
19503 Frange2 = Frame( frame2fr )
19504 Frange2.pack(side=TOP)
19505 stopfreqlab = Label(Frange2, text=
"Stopfreq")
19506 stopfreqlab.pack(side=LEFT)
19507 StopFreqEntry = Entry(Frange2, width=7, cursor=
'double_arrow')
19508 StopFreqEntry.bind(
'<Return>', onTextKey)
19509 StopFreqEntry.bind(
'<MouseWheel>', onStopfreqScroll)
19510 StopFreqEntry.bind(
"<Button-4>", onStopfreqScroll)
19511 StopFreqEntry.bind(
"<Button-5>", onStopfreqScroll)
19512 StopFreqEntry.bind(
'<Key>', onTextKey)
19513 StopFreqEntry.pack(side=LEFT)
19514 StopFreqEntry.delete(0,
"end")
19515 StopFreqEntry.insert(0,10000)
19517 HzScale = Frame( frame2fr )
19518 HzScale.pack(side=TOP)
19519 sarb1 = Radiobutton(HzScale, text=
"Lin F", variable=HScale, value=0, command=UpdateFreqTrace )
19520 sarb1.pack(side=LEFT)
19521 sarb2 = Radiobutton(HzScale, text=
"Log F", variable=HScale, value=1, command=UpdateFreqTrace )
19522 sarb2.pack(side=LEFT)
19524 PhaseCenter = Frame( frame2fr )
19525 PhaseCenter.pack(side=TOP)
19526 PhCenlab = Label(PhaseCenter, text=
"Center Phase on")
19527 PhCenlab.pack(side=LEFT)
19528 PhCenFreqEntry = Entry(PhaseCenter, width=5, cursor=
'double_arrow')
19529 PhCenFreqEntry.bind(
'<Return>', onTextKey)
19530 PhCenFreqEntry.bind(
'<MouseWheel>', onTextScroll)
19531 PhCenFreqEntry.bind(
"<Button-4>", onTextScroll)
19532 PhCenFreqEntry.bind(
"<Button-5>", onTextScroll)
19533 PhCenFreqEntry.bind(
'<Key>', onTextKey)
19534 PhCenFreqEntry.pack(side=LEFT)
19535 PhCenFreqEntry.delete(0,
"end")
19536 PhCenFreqEntry.insert(0,RelPhaseCenter.get())
19538 vertlabel = Label( frame2fr, text=
"Vertical Scale" )
19539 vertlabel.pack(side=TOP)
19540 savrb0 = Radiobutton(frame2fr, text=
"In dB", variable=SAVScale, value=0, command=UpdateFreqTrace )
19541 savrb0.pack(side=TOP)
19543 DBrange = Frame( frame2fr )
19544 DBrange.pack(side=TOP)
19545 sab3 = Button(DBrange, text=
"+dB/div", style=
"W8.TButton", command=BDBdiv2)
19546 sab3.pack(side=LEFT)
19547 sab4 = Button(DBrange, text=
"-dB/div", style=
"W8.TButton", command=BDBdiv1)
19548 sab4.pack(side=LEFT)
19550 LVBrange = Frame( frame2fr )
19551 LVBrange.pack(side=TOP)
19552 sab5 = Button(LVBrange, text=
"LVL+10", style=
"W8.TButton", command=Blevel4)
19553 sab5.pack(side=LEFT)
19554 sab6 = Button(LVBrange, text=
"LVL-10", style=
"W8.TButton", command=Blevel3)
19555 sab6.pack(side=LEFT)
19557 LVSrange = Frame( frame2fr )
19558 LVSrange.pack(side=TOP)
19559 sab7 = Button(LVSrange, text=
"LVL+1", style=
"W8.TButton", command=Blevel2)
19560 sab7.pack(side=LEFT)
19561 sab8 = Button(LVSrange, text=
"LVL-1", style=
"W8.TButton", command=Blevel1)
19562 sab8.pack(side=LEFT)
19564 vertscale = Frame( frame2fr )
19565 vertscale.pack(side=TOP)
19566 savlab1 = Label(vertscale, text=
"V RMS")
19567 savlab1.pack(side=LEFT)
19568 savrb1 = Radiobutton(vertscale, text=
"Lin", variable=SAVScale, value=1, command=UpdateFreqTrace )
19569 savrb1.pack(side=LEFT)
19570 savrb2 = Radiobutton(vertscale, text=
"Log", variable=SAVScale, value=2, command=UpdateFreqTrace )
19571 savrb2.pack(side=LEFT)
19572 sapsdcb = Checkbutton(frame2fr, text=
"PSD (sqrt Hz)", variable=SAVPSD)
19573 sapsdcb.pack(side=TOP)
19575 vertmax = Frame( frame2fr )
19576 vertmax.pack(side=TOP)
19577 vertmaxlab = Label(vertmax, text=
"VRMS Max")
19578 vertmaxlab.pack(side=LEFT)
19579 SAvertmaxEntry = Spinbox(vertmax, width=6, cursor=
'double_arrow', values=SAMagdiv, command=BCHBIlevel)
19580 SAvertmaxEntry.bind(
'<MouseWheel>', onSpinBoxScroll)
19581 SAvertmaxEntry.bind(
"<Button-4>", onSpinBoxScroll)
19582 SAvertmaxEntry.bind(
"<Button-5>", onSpinBoxScroll)
19583 SAvertmaxEntry.delete(0,
"end")
19584 SAvertmaxEntry.insert(0,
"1.0")
19585 SAvertmaxEntry.pack(side=LEFT)
19596 vertmin = Frame( frame2fr )
19597 vertmin.pack(side=TOP)
19598 vertminlab = Label(vertmin, text=
"VRMS Min")
19599 vertminlab.pack(side=LEFT)
19600 SAvertminEntry = Spinbox(vertmin, width=6, cursor=
'double_arrow', values=SAMagdiv, command=BCHBIlevel)
19601 SAvertminEntry.bind(
'<MouseWheel>', onSpinBoxScroll)
19602 SAvertminEntry.bind(
"<Button-4>", onSpinBoxScroll)
19603 SAvertminEntry.bind(
"<Button-5>", onSpinBoxScroll)
19604 SAvertminEntry.pack(side=LEFT)
19605 SAvertminEntry.delete(0,
"end")
19606 SAvertminEntry.insert(0,
"100uV")
19617 sadismiss1button = Button(frame2fr, text=
"Dismiss", style=
"W8.TButton", command=DestroySpectrumScreen)
19618 sadismiss1button.pack(side=TOP)
19620 ADI2 = Label(frame2fr, image=logo, anchor=
"sw", compound=
"top")
19621 ADI2.pack(side=TOP)
19622 if ShowBallonHelp > 0:
19633 sadismiss1button_tip =
CreateToolTip(sadismiss1button,
'Dismiss Spectrum Analyzer window')
19634 if LocalLanguage !=
"English":
19638 global freqwindow, SpectrumScreenStatus, ca
19640 SpectrumScreenStatus.set(0)
19643 freqwindow.destroy()
19644 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
19647 global XYca, GRWXY, XOLXY, GRHXY, Y0TXY, CANVASwidthXY, CANVASheightXY, FontSize
19648 global YminXY, YmaxXY, XminXY, XmaxXY
19650 XOLXY = FontSize * 7
19651 CANVASwidthXY = event.width - 4
19652 CANVASheightXY = event.height - 4
19653 GRWXY = CANVASwidthXY - (2*X0LXY)
19654 GRHXY = CANVASheightXY - int(10 * FontSize)
19656 YmaxXY = Y0TXY + GRHXY
19658 XmaxXY = X0LXY + GRWXY
19663 global logo, CANVASwidthXY, CANVASheightXY, Xsignal, EnableUserEntries
19664 global YsignalVA, YsignalVB, YsignalIA, YsignalIB, YsignalM, YsignalMX, YsignalMY
19665 global XYRefAV, XYRefAI, XYRefBV, XYRefBI, XYRefM, XYRefMX, XYRefMY
19666 global XYScreenStatus, MarkerXYScale, XYca, xywindow, RevDate, SWRev, XYDisp
19667 global CHAsbxy, CHBsbxy, CHAxylab, CHBxylab, CHAVPosEntryxy, CHBVPosEntryxy
19668 global CHAIsbxy, CHBIsbxy, CHAIPosEntryxy, CHBIPosEntryxy, ScreenXYrefresh
19669 global YminXY, Y0TXY, YmaxXY, GRHXY, XminXY, X0LXY, XmaxXY, X0LXY, GRWXY, CANVASwidthXY, CANVASheightXY
19670 global FrameRefief, BorderSize, LocalLanguage, User3Entry, User4Entry
19671 global math_tip, bsxy_tip, brxy_tip, snapbutton_tip, savebutton_tip, dismissxybutton_tip, CHAxylab_tip
19672 global CHBxylab_tip, CHAxyofflab_tip, CHBxyofflab_tip, CHAIxyofflab_tip, CHBIxyofflab_tip
19674 if XYScreenStatus.get() == 0:
19675 XYScreenStatus.set(1)
19679 YmaxXY = Y0TXY + GRHXY
19681 XmaxXY = X0LXY + GRWXY
19682 CANVASwidthXY = GRWXY + (2*X0LXY)
19683 CANVASheightXY = GRHXY + 80
19684 xywindow = Toplevel()
19685 xywindow.title(
"X-Y Plot " + SWRev + RevDate)
19686 xywindow.protocol(
"WM_DELETE_WINDOW", DestroyXYScreen)
19687 frame2xyr = Frame(xywindow, borderwidth=BorderSize, relief=FrameRefief)
19688 frame2xyr.pack(side=RIGHT, expand=NO, fill=BOTH)
19690 frame2xy = Frame(xywindow, borderwidth=BorderSize, relief=FrameRefief)
19691 frame2xy.pack(side=TOP, expand=YES, fill=BOTH)
19693 frame3xy = Frame(xywindow, borderwidth=BorderSize, relief=FrameRefief)
19694 frame3xy.pack(side=TOP, expand=NO, fill=BOTH)
19696 frame4xy = Frame(xywindow, borderwidth=BorderSize, relief=FrameRefief)
19697 frame4xy.pack(side=TOP, expand=NO, fill=BOTH)
19699 XYca = Canvas(frame2xy, width=CANVASwidthXY, height=CANVASheightXY, background=COLORcanvas, cursor=
'cross')
19700 XYca.bind(
'<Configure>', XYcaresize)
19701 XYca.bind(
'<1>', onCanvasXYLeftClick)
19702 XYca.bind(
'<3>', onCanvasXYRightClick)
19703 XYca.bind(
"<Motion>",onCanvasMouse_xy)
19704 XYca.bind(
'<MouseWheel>', onCanvasXYScrollClick)
19705 XYca.bind(
"<Button-4>", onCanvasXYScrollClick)
19706 XYca.bind(
"<Button-5>", onCanvasXYScrollClick)
19707 XYca.bind(
"<Up>", onCanvasUpArrow)
19708 XYca.bind(
"<Down>", onCanvasDownArrow)
19709 XYca.bind(
"<Left>", onCanvasLeftArrow)
19710 XYca.bind(
"<Right>", onCanvasRightArrow)
19711 XYca.bind(
"<space>", onCanvasSpaceBar)
19712 XYca.bind(
"a", onCanvasAverage)
19713 XYca.pack(side=TOP, fill=BOTH, expand=YES)
19715 RUNframe = Frame( frame2xyr )
19716 RUNframe.pack(side=TOP)
19717 rbxy = Button(RUNframe, text=
"Run", style=
"Run.TButton", command=BStart)
19718 rbxy.pack(side=LEFT)
19719 sbxy = Button(RUNframe, text=
"Stop", style=
"Stop.TButton", command=BStop)
19720 sbxy.pack(side=LEFT)
19722 mathbt = Button(frame2xyr, text=
"Math", style=
"W5.TButton", command = NewEnterMathControls)
19723 mathbt.pack(side=TOP)
19726 AxisLabX = Label(frame2xyr, text =
"-X Axis-", style=
"A10R1.TLabelframe.Label")
19727 AxisLabX.pack(side=TOP)
19728 chaxmenu = Frame( frame2xyr )
19729 chaxmenu.pack(side=TOP)
19730 rbx2 = Radiobutton(chaxmenu, text=
'CA-V', variable=Xsignal, value=1, command=UpdateXYTrace)
19731 rbx2.pack(side=LEFT, anchor=W)
19732 rbx3 = Radiobutton(chaxmenu, text=
'CA-I', variable=Xsignal, value=2, command=UpdateXYTrace)
19733 rbx3.pack(side=LEFT, anchor=W)
19734 chbxmenu = Frame( frame2xyr )
19735 chbxmenu.pack(side=TOP)
19736 rbx4 = Radiobutton(chbxmenu, text=
'CB-V', variable=Xsignal, value=3, command=UpdateXYTrace)
19737 rbx4.pack(side=LEFT, anchor=W)
19738 rbx5 = Radiobutton(chbxmenu, text=
'CB-I', variable=Xsignal, value=4, command=UpdateXYTrace)
19739 rbx5.pack(side=LEFT, anchor=W)
19740 rbx7 = Radiobutton(frame2xyr, text=
'Histogram CA-V', variable=Xsignal, value=6, command=BHistAsPercent)
19741 rbx7.pack(side=TOP)
19742 rbx8 = Radiobutton(frame2xyr, text=
'Histogram CB-V', variable=Xsignal, value=7, command=BHistAsPercent)
19743 rbx8.pack(side=TOP)
19744 rbx6 = Radiobutton(frame2xyr, text=
'Math', variable=Xsignal, value=5, command=UpdateXYTrace)
19745 rbx6.pack(side=TOP)
19747 AxisLabY = Label(frame2xyr, text =
"-Y Axis-", style=
"A10R2.TLabelframe.Label")
19748 AxisLabY.pack(side=TOP)
19749 chaymenu = Frame( frame2xyr )
19750 chaymenu.pack(side=TOP)
19751 rby2 = Checkbutton(chaymenu, text=
'CA-V', variable=YsignalVA, command=UpdateXYTrace)
19752 rby2.pack(side=LEFT, anchor=W)
19753 rby3 = Checkbutton(chaymenu, text=
'CA-I', variable=YsignalIA, command=UpdateXYTrace)
19754 rby3.pack(side=LEFT, anchor=W)
19755 chbymenu = Frame( frame2xyr )
19756 chbymenu.pack(side=TOP)
19757 rby4 = Checkbutton(chbymenu, text=
'CB-V', variable=YsignalVB, command=UpdateXYTrace)
19758 rby4.pack(side=LEFT, anchor=W)
19759 rby5 = Checkbutton(chbymenu, text=
'CB-I', variable=YsignalIB, command=UpdateXYTrace)
19760 rby5.pack(side=LEFT, anchor=W)
19761 rby7 = Checkbutton(frame2xyr, text=
'Math', variable=YsignalM, command=UpdateXYTrace)
19762 rby7.pack(side=TOP)
19763 mymenu = Frame( frame2xyr )
19764 mymenu.pack(side=TOP)
19765 rby7 = Checkbutton(mymenu, text=
'Math-X', variable=YsignalMX, command=UpdateXYTrace)
19766 rby7.pack(side=LEFT, anchor=W)
19767 rby8 = Checkbutton(mymenu, text=
'Math-Y', variable=YsignalMY, command=UpdateXYTrace)
19768 rby8.pack(side=LEFT, anchor=W)
19770 cursormenu = Frame( frame2xyr )
19771 cursormenu.pack(side=TOP)
19772 cb1 = Checkbutton(cursormenu, text=
'X-Cur', variable=ShowXCur)
19773 cb1.pack(side=LEFT, anchor=W)
19774 cb2 = Checkbutton(cursormenu, text=
'Y-Cur', variable=ShowYCur)
19775 cb2.pack(side=LEFT, anchor=W)
19776 cb4 = Checkbutton(frame2xyr, text=
'Persistance', variable=ScreenXYrefresh, command=UpdateXYTrace)
19780 XYrefmenu = Menubutton(frame2xyr, text=
"Ref Traces", style=
"W11.TButton")
19781 XYrefmenu.menu = Menu(XYrefmenu, tearoff = 0 )
19782 XYrefmenu[
"menu"] = XYrefmenu.menu
19783 XYrefmenu.menu.add_command(label=
"Save SnapShot", command=BSnapShotXY)
19784 XYrefmenu.menu.add_checkbutton(label=
"CA-V", variable=XYRefAV, command=UpdateXYTrace)
19785 XYrefmenu.menu.add_checkbutton(label=
"CA-I", variable=XYRefAI, command=UpdateXYTrace)
19786 XYrefmenu.menu.add_checkbutton(label=
"CB-V", variable=XYRefBV, command=UpdateXYTrace)
19787 XYrefmenu.menu.add_checkbutton(label=
"CB-I", variable=XYRefBI, command=UpdateXYTrace)
19788 XYrefmenu.menu.add_checkbutton(label=
"Math", variable=XYRefM, command=UpdateXYTrace)
19789 XYrefmenu.menu.add_checkbutton(label=
"Math-X", variable=XYRefMX, command=UpdateXYTrace)
19790 XYrefmenu.menu.add_checkbutton(label=
"Math-Y", variable=XYRefMY, command=UpdateXYTrace)
19791 XYrefmenu.pack(side=TOP)
19794 dismissxybutton = Button(frame2xyr, style=
"W7.TButton", text=
"Dismiss", command=DestroyXYScreen)
19795 dismissxybutton.pack(side=TOP)
19797 if EnableUserEntries > 0:
19798 UserEnt = Frame( frame2xyr )
19799 UserEnt.pack(side=TOP)
19800 userentlab = Button(UserEnt, text=
"User", width=4, style=
"W4.TButton")
19801 userentlab.pack(side=LEFT,fill=X)
19802 User3Entry = Entry(UserEnt, width=5, cursor=
'double_arrow')
19803 User3Entry.bind(
'<Return>', onTextKey)
19804 User3Entry.bind(
'<MouseWheel>', onTextScroll)
19805 User3Entry.bind(
"<Button-4>", onTextScroll)
19806 User3Entry.bind(
"<Button-5>", onTextScroll)
19807 User3Entry.bind(
'<Key>', onTextKey)
19808 User3Entry.pack(side=LEFT)
19809 User3Entry.delete(0,
"end")
19810 User3Entry.insert(0,0.0)
19811 User4Entry = Entry(UserEnt, width=5, cursor=
'double_arrow')
19812 User4Entry.bind(
'<Return>', onTextKey)
19813 User4Entry.bind(
'<MouseWheel>', onTextScroll)
19814 User4Entry.bind(
"<Button-4>", onTextScroll)
19815 User4Entry.bind(
"<Button-5>", onTextScroll)
19816 User4Entry.bind(
'<Key>', onTextKey)
19817 User4Entry.pack(side=LEFT)
19818 User4Entry.delete(0,
"end")
19819 User4Entry.insert(0,0.0)
19821 ADI1xy = Label(frame2xyr, image=logo, anchor=
"sw", compound=
"top")
19822 ADI1xy.pack(side=TOP)
19824 MarkerXYScale = IntVar(0)
19825 MarkerXYScale.set(1)
19827 CHAsbxy = Spinbox(frame3xy, width=4, cursor=
'double_arrow', values=CHvpdiv)
19828 CHAsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
19829 CHAsbxy.bind(
"<Button-4>", onSpinBoxScroll)
19830 CHAsbxy.bind(
"<Button-5>", onSpinBoxScroll)
19831 CHAsbxy.pack(side=LEFT)
19832 CHAsbxy.delete(0,
"end")
19833 CHAsbxy.insert(0,0.5)
19834 CHAxylab = Button(frame3xy, text=
"CA V/Div", style=
"Rtrace1.TButton", command=SetXYScaleA)
19835 CHAxylab.pack(side=LEFT)
19837 CHAVPosEntryxy = Entry(frame3xy, width=5, cursor=
'double_arrow')
19838 CHAVPosEntryxy.bind(
'<Return>', onTextKey)
19839 CHAVPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
19840 CHAVPosEntryxy.bind(
"<Button-4>", onTextScroll)
19841 CHAVPosEntryxy.bind(
"<Button-5>", onTextScroll)
19842 CHAVPosEntryxy.bind(
'<Key>', onTextKey)
19843 CHAVPosEntryxy.pack(side=LEFT)
19844 CHAVPosEntryxy.delete(0,
"end")
19845 CHAVPosEntryxy.insert(0,2.5)
19846 CHAofflabxy = Button(frame3xy, text=
"CA V Pos", style=
"Rtrace1.TButton", command=SetXYVAPoss)
19847 CHAofflabxy.pack(side=LEFT)
19849 CHAIsbxy = Spinbox(frame3xy, width=4, cursor=
'double_arrow', values=CHipdiv)
19850 CHAIsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
19851 CHAIsbxy.bind(
"<Button-4>", onSpinBoxScroll)
19852 CHAIsbxy.bind(
"<Button-5>", onSpinBoxScroll)
19853 CHAIsbxy.pack(side=LEFT)
19854 CHAIsbxy.delete(0,
"end")
19855 CHAIsbxy.insert(0,50.0)
19856 CHAIlabxy = Label(frame3xy, text=
"CA mA/Div", style=
"Strace3.TButton")
19857 CHAIlabxy.pack(side=LEFT)
19859 CHAIPosEntryxy = Entry(frame3xy, width=5, cursor=
'double_arrow')
19860 CHAIPosEntryxy.bind(
'<Return>', onTextKey)
19861 CHAIPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
19862 CHAIPosEntryxy.bind(
"<Button-4>", onTextScroll)
19863 CHAIPosEntryxy.bind(
"<Button-5>", onTextScroll)
19864 CHAIPosEntryxy.bind(
'<Key>', onTextKey)
19865 CHAIPosEntryxy.pack(side=LEFT)
19866 CHAIPosEntryxy.delete(0,
"end")
19867 CHAIPosEntryxy.insert(0,0.0)
19868 CHAIofflabxy = Button(frame3xy, text=
"CA I Pos", style=
"Rtrace3.TButton", command=SetXYIAPoss)
19869 CHAIofflabxy.pack(side=LEFT)
19871 CHBsbxy = Spinbox(frame4xy, width=4, cursor=
'double_arrow', values=CHvpdiv)
19872 CHBsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
19873 CHBsbxy.bind(
"<Button-4>", onSpinBoxScroll)
19874 CHBsbxy.bind(
"<Button-5>", onSpinBoxScroll)
19875 CHBsbxy.pack(side=LEFT)
19876 CHBsbxy.delete(0,
"end")
19877 CHBsbxy.insert(0,0.5)
19879 CHBxylab = Button(frame4xy, text=
"CB V/Div", style=
"Strace2.TButton", command=SetXYScaleB)
19880 CHBxylab.pack(side=LEFT)
19882 CHBVPosEntryxy = Entry(frame4xy, width=5, cursor=
'double_arrow')
19883 CHBVPosEntryxy.bind(
'<Return>', onTextKey)
19884 CHBVPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
19885 CHBVPosEntryxy.bind(
"<Button-4>", onTextScroll)
19886 CHBVPosEntryxy.bind(
"<Button-5>", onTextScroll)
19887 CHBVPosEntryxy.bind(
'<Key>', onTextKey)
19888 CHBVPosEntryxy.pack(side=LEFT)
19889 CHBVPosEntryxy.delete(0,
"end")
19890 CHBVPosEntryxy.insert(0,2.5)
19891 CHBofflabxy = Button(frame4xy, text=
"CB V Pos", style=
"Rtrace2.TButton", command=SetXYVBPoss)
19892 CHBofflabxy.pack(side=LEFT)
19894 CHBIsbxy = Spinbox(frame4xy, width=4, cursor=
'double_arrow', values=CHipdiv)
19895 CHBIsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
19896 CHBIsbxy.bind(
"<Button-4>", onSpinBoxScroll)
19897 CHBIsbxy.bind(
"<Button-5>", onSpinBoxScroll)
19898 CHBIsbxy.pack(side=LEFT)
19899 CHBIsbxy.delete(0,
"end")
19900 CHBIsbxy.insert(0,50.0)
19901 CHBIlabxy = Label(frame4xy, text=
"CB mA/Div", style=
"Strace4.TButton")
19902 CHBIlabxy.pack(side=LEFT)
19904 CHBIPosEntryxy = Entry(frame4xy, width=5, cursor=
'double_arrow')
19905 CHBIPosEntryxy.bind(
'<Return>', onTextKey)
19906 CHBIPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
19907 CHBIPosEntryxy.bind(
"<Button-4>", onTextScroll)
19908 CHBIPosEntryxy.bind(
"<Button-5>", onTextScroll)
19909 CHBIPosEntryxy.bind(
'<Key>', onTextKey)
19910 CHBIPosEntryxy.pack(side=LEFT)
19911 CHBIPosEntryxy.delete(0,
"end")
19912 CHBIPosEntryxy.insert(0,0.0)
19913 CHBIofflabxy = Button(frame4xy, text=
"CB I Pos", style=
"Rtrace4.TButton", command=SetXYIBPoss)
19914 CHBIofflabxy.pack(side=LEFT)
19916 if ShowBallonHelp > 0:
19927 CHAxylab_tip =
CreateToolTip(CHAxylab,
'Select CHA-V vertical range/position axis to be used for markers and drawn color')
19928 CHBxylab_tip =
CreateToolTip(CHBxylab,
'Select CHB-V vertical range/position axis to be used for markers and drawn color')
19929 CHAxyofflab_tip =
CreateToolTip(CHAofflabxy,
'Set CHA-V position to DC average of signal')
19930 CHBxyofflab_tip =
CreateToolTip(CHBofflabxy,
'Set CHB-V position to DC average of signal')
19931 CHAIxyofflab_tip =
CreateToolTip(CHAIofflabxy,
'Set CHA-I position to DC average of signal')
19932 CHBIxyofflab_tip =
CreateToolTip(CHBIofflabxy,
'Set CHB-I position to DC average of signal')
19933 if LocalLanguage !=
"English":
19937 global xywindow, XYScreenStatus, ca, XYDisp
19939 XYScreenStatus.set(0)
19943 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
19948 global DevID, devx, CHA, CHB, RevDate, OnBoardRes, AD584act, FWRevOne
19949 global discontloop, contloop, session, AWGSync, SWRev
19952 if FWRevOne < 2.06:
19953 showwarning(
"WARNING",
"Out of date Firmware Revision!")
19955 calwindow = Toplevel()
19956 calwindow.title(
"ALM1000 Calibration tool " + SWRev + RevDate)
19958 SCallab = Label(calwindow, text=
"Channel Gain / Offset calibration")
19959 SCallab.grid(row=0, column=0, columnspan=2, sticky=W)
19960 labelA0 = Label(calwindow, style=
"A12B.TLabel")
19961 labelA0.grid(row=1, column=0, columnspan=2, sticky=W)
19962 labelA0.config(text =
"CA gnd Volts")
19963 labelAMax = Label(calwindow, style=
"A12B.TLabel")
19964 labelAMax.grid(row=2, column=0, columnspan=2, sticky=W)
19965 labelAMax.config(text =
"CA 584 Volts")
19966 labelAMin = Label(calwindow, style=
"A12B.TLabel")
19967 labelAMin.grid(row=3, column=0, columnspan=2, sticky=W)
19968 labelAMin.config(text =
"CA 5V Src I ")
19969 labelB0 = Label(calwindow, style=
"A12B.TLabel")
19970 labelB0.grid(row=4, column=0, columnspan=2, sticky=W)
19971 labelB0.config(text =
"CA gnd Volts")
19972 labelBMax = Label(calwindow, style=
"A12B.TLabel")
19973 labelBMax.grid(row=5, column=0, columnspan=2, sticky=W)
19974 labelBMax.config(text =
"CB 584 Volts")
19975 labelBMin = Label(calwindow, style=
"A12B.TLabel")
19976 labelBMin.grid(row=6, column=0, columnspan=2, sticky=W)
19977 labelBMin.config(text =
"CB 5V Src I ")
19978 labelAB = Label(calwindow, style=
"A12B.TLabel")
19979 labelAB.grid(row=7, column=0, columnspan=2, sticky=W)
19980 labelAB.config(text =
"CA 0V Src I")
19981 labelBA = Label(calwindow, style=
"A12B.TLabel")
19982 labelBA.grid(row=8, column=0, columnspan=2, sticky=W)
19983 labelBA.config(text =
"CA 0V Src I")
19984 labelSIA0 = Label(calwindow, style=
"A12B.TLabel")
19985 labelSIA0.grid(row=9, column=0, columnspan=2, sticky=W)
19986 labelSIA0.config(text =
"CA 2.5 Src 0 I")
19987 labelSIA = Label(calwindow, style=
"A12B.TLabel")
19988 labelSIA.grid(row=10, column=0, columnspan=2, sticky=W)
19989 labelSIA.config(text =
"CA 50 Src 100 ")
19990 labelSIAN = Label(calwindow, style=
"A12B.TLabel")
19991 labelSIAN.grid(row=11, column=0, columnspan=2, sticky=W)
19992 labelSIAN.config(text =
"CA 50 Src -45")
19993 labelSIB0 = Label(calwindow, style=
"A12B.TLabel")
19994 labelSIB0.grid(row=12, column=0, columnspan=2, sticky=W)
19995 labelSIB0.config(text =
"CB 2.5 Src 0 I")
19996 labelSIB = Label(calwindow, style=
"A12B.TLabel")
19997 labelSIB.grid(row=13, column=0, columnspan=2, sticky=W)
19998 labelSIB.config(text =
"CB 50 Src 100 ")
19999 labelSIBN = Label(calwindow, style=
"A12B.TLabel")
20000 labelSIBN.grid(row=14, column=0, columnspan=2, sticky=W)
20001 labelSIBN.config(text =
"CB 50 Src -45")
20003 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
20004 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
20007 if session.continuous:
20008 print(
"ending session")
20011 if askyesno(
"Reset Calibration",
"Do You Need To Reset Default Calibration?", parent=calwindow):
20014 devx.write_calibration(
"calib_default.txt")
20017 filename = askopenfilename(defaultextension =
".txt", filetypes=[(
"Default Cal File",
"*.txt")], parent=calwindow)
20018 devx.write_calibration(filename)
20021 devidstr = DevID[17:31]
20022 filename =
"calib" + devidstr +
".txt"
20023 if os.path.isfile(filename):
20024 if askyesno(
"Calibration exists",
"A previous Calibration file exists. /n Do you want to load that?", parent=calwindow):
20025 devx.write_calibration(filename)
20027 calwindow.destroy()
20030 if askyesno(
"Continue?",
"Continure with self calibration?", parent=calwindow):
20033 calwindow.destroy()
20036 CalFile = open(filename,
"w")
20038 CHA.mode = Mode.HI_Z
20039 CHB.mode = Mode.HI_Z
20040 devx.ctrl_transfer( 0x40, 0x50, 34, 0, 0, 0, 100)
20041 devx.ctrl_transfer( 0x40, 0x50, 39, 0, 0, 0, 100)
20043 ADsignal1 = devx.get_samples(1010)
20046 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
20047 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
20048 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
20049 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
20050 RequestVRef = askstring(
"External Reference",
"Enter External Reference Voltage", initialvalue=AD584act, parent=root)
20052 AD584act = float(RequestVRef)*1.0
20055 showinfo(
"CONNECT",
"Connect External Voltage to both CHA and CHB inputs.", parent=calwindow)
20058 CHA.mode = Mode.HI_Z
20059 CHB.mode = Mode.HI_Z
20060 ADsignal1 = devx.get_samples(1010)
20061 CHA584Raw = CHB584Raw = 0.0
20063 for index
in range(1000):
20064 CHA584Raw += ADsignal1[index+10][0][0]
20065 CHB584Raw += ADsignal1[index+10][1][0]
20067 CHA584Raw = CHA584Raw / 1000.0
20068 CHB584Raw = CHB584Raw / 1000.0
20069 VString =
"Extern A Volts " +
' {0:.4f} '.format(CHA584Raw)
20070 labelAMax.config(text = VString)
20071 VString =
"Extern B Volts " +
' {0:.4f} '.format(CHB584Raw)
20072 labelBMax.config(text = VString)
20073 Lower = AD584act - 0.3
20074 Upper = AD584act + 0.3
20075 if CHA584Raw < Lower
or CHA584Raw > Upper
or CHB584Raw < Lower
or CHB584Raw > Upper:
20076 if askyesno(
"CONNECT",
"Did not get good data from Ref V check connections!\n Abort(Y) or Try again(N)", parent=calwindow):
20077 CHA.mode = Mode.HI_Z
20078 CHB.mode = Mode.HI_Z
20081 calwindow.destroy()
20086 showinfo(
"DISCONNECT",
"Disconnect everything from CHA and CHB pins.", parent=calwindow)
20087 CHAGndRaw = CHBGndRaw = CHAI0gRaw = CHBI0gRaw = 0.0
20089 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
20090 devx.ctrl_transfer(0x40, 0x50, 33, 0, 0, 0, 100)
20091 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
20092 devx.ctrl_transfer(0x40, 0x50, 38, 0, 0, 0, 100)
20093 CHA.mode = Mode.HI_Z
20094 CHB.mode = Mode.HI_Z
20095 ADsignal1 = devx.get_samples(1010)
20097 for index
in range(1000):
20098 CHAGndRaw += ADsignal1[index+10][0][0]
20099 CHBGndRaw += ADsignal1[index+10][1][0]
20100 CHAI0gRaw += ADsignal1[index+10][0][1]
20101 CHBI0gRaw += ADsignal1[index+10][1][1]
20103 CHAGndRaw = CHAGndRaw / 1000.0
20104 CHAI0gRaw = CHAI0gRaw / 1000.0
20105 CHBGndRaw = CHBGndRaw / 1000.0
20106 CHBI0gRaw = CHBI0gRaw / 1000.0
20107 VString =
"CA gnd Volts " +
' {0:.4f} '.format(CHAGndRaw)
20108 labelA0.config(text = VString)
20109 VString =
"CB gnd Volts " +
' {0:.4f} '.format(CHBGndRaw)
20110 labelB0.config(text = VString)
20111 CHA2p5Raw = CHB2p5Raw = CHAI02p5Raw = CHBI02p5Raw = 0.0
20113 CHA.mode = Mode.HI_Z
20114 CHB.mode = Mode.HI_Z
20115 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
20116 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
20117 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
20118 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
20119 ADsignal1 = devx.get_samples(1010)
20121 for index
in range(1000):
20122 CHA2p5Raw += ADsignal1[index+10][0][0]
20123 CHB2p5Raw += ADsignal1[index+10][1][0]
20124 CHAI02p5Raw += ADsignal1[index+10][0][1]
20125 CHBI02p5Raw += ADsignal1[index+10][1][1]
20127 CHA2p5Raw = CHA2p5Raw / 1000.0
20128 CHAI02p5Raw = CHAI02p5Raw / 1000.0
20129 CHB2p5Raw = CHB2p5Raw / 1000.0
20130 CHBI02p5Raw = CHBI02p5Raw / 1000.0
20132 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
20133 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
20134 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
20135 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
20136 CHA.mode = Mode.SVMI
20138 CHB.mode = Mode.SVMI
20140 ADsignal1 = devx.get_samples(1010)
20141 CHAF0vRaw = CHBF0vRaw = CHAI0F0Raw = CHBI0F0Raw = 0.0
20143 for index
in range(1000):
20144 CHAF0vRaw += ADsignal1[index+10][0][0]
20145 CHBF0vRaw += ADsignal1[index+10][1][0]
20146 CHAI0F0Raw += ADsignal1[index+10][0][1]
20147 CHBI0F0Raw += ADsignal1[index+10][1][1]
20149 CHAF0vRaw = CHAF0vRaw / 1000.0
20150 CHAI0F0Raw = CHAI0F0Raw / 1000.0
20151 CHBF0vRaw = CHBF0vRaw / 1000.0
20152 CHBI0F0Raw = CHBI0F0Raw / 1000.0
20154 CHA.mode = Mode.SVMI
20156 CHB.mode = Mode.SVMI
20158 ADsignal1 = devx.get_samples(1010)
20159 CHAF25vRaw = CHAI0F25Raw = CHBF25vRaw = CHBI0F25Raw = 0.0
20161 for index
in range(1000):
20162 CHAF25vRaw += ADsignal1[index+10][0][0]
20163 CHBF25vRaw += ADsignal1[index+10][1][0]
20164 CHAI0F25Raw += ADsignal1[index+10][0][1]
20165 CHBI0F25Raw += ADsignal1[index+10][1][1]
20167 CHAF25vRaw = CHAF25vRaw / 1000.0
20168 CHAI0F25Raw = CHAI0F25Raw / 1000.0
20169 CHBF25vRaw = CHBF25vRaw / 1000.0
20170 CHBI0F25Raw = CHBI0F25Raw / 1000.0
20173 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
20174 devx.ctrl_transfer(0x40, 0x50, 33, 0, 0, 0, 100)
20175 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
20176 devx.ctrl_transfer(0x40, 0x50, 38, 0, 0, 0, 100)
20177 CHA.mode = Mode.SVMI
20179 CHB.mode = Mode.SVMI
20181 ADsignal1 = devx.get_samples(1010)
20182 CHASr5vRaw = CHAISr5vRaw = CHBSr5vRaw = CHBISr5vRaw = 0.0
20183 for index
in range(1000):
20184 CHASr5vRaw += ADsignal1[index+10][0][0]
20185 CHBSr5vRaw += ADsignal1[index+10][1][0]
20186 CHAISr5vRaw += ADsignal1[index+10][0][1]
20187 CHBISr5vRaw += ADsignal1[index+10][1][1]
20189 CHASr5vRaw = CHASr5vRaw / 1000.0
20190 CHAISr5vRaw = CHAISr5vRaw / 1000.0
20191 CHBSr5vRaw = CHBSr5vRaw / 1000.0
20192 CHBISr5vRaw = CHBISr5vRaw / 1000.0
20193 VString =
"CA 5V Src I " +
' {0:.4f} '.format(CHAISr5vRaw)
20194 labelAMin.config(text = VString)
20195 VString =
"CB 5V Src I " +
' {0:.4f} '.format(CHBISr5vRaw)
20196 labelBMin.config(text = VString)
20198 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
20199 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
20200 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
20201 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
20202 CHA.mode = Mode.SVMI
20203 CHA.constant(0.001)
20204 CHB.mode = Mode.SVMI
20205 CHB.constant(0.001)
20206 ADsignal1 = devx.get_samples(1010)
20207 CHASr0vRaw = CHAISr0vRaw = CHBSr0vRaw = CHBISr0vRaw = 0.0
20208 for index
in range(1000):
20209 CHASr0vRaw += ADsignal1[index+10][0][0]
20210 CHBSr0vRaw += ADsignal1[index+10][1][0]
20211 CHAISr0vRaw += ADsignal1[index+10][0][1]
20212 CHBISr0vRaw += ADsignal1[index+10][1][1]
20214 CHASr0vRaw = CHASr0vRaw / 1000.0
20215 CHAISr0vRaw = CHAISr0vRaw / 1000.0
20216 CHBSr0vRaw = CHBSr0vRaw / 1000.0
20217 CHBISr0vRaw = CHBISr0vRaw / 1000.0
20218 VString =
"CA 0V Src I " +
' {0:.4f} '.format(CHAISr0vRaw)
20219 labelAB.config(text = VString)
20220 VString =
"CB 0V Src I " +
' {0:.4f} '.format(CHBISr0vRaw)
20221 labelBA.config(text = VString)
20224 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
20225 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
20226 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
20227 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
20228 CHA.mode = Mode.SIMV
20230 CHB.mode = Mode.SIMV
20232 ADsignal1 = devx.get_samples(1010)
20233 CHAVSr0iRaw = CHAISr0iRaw = CHBVSr0iRaw = CHBISr0iRaw = 0.0
20234 for index
in range(1000):
20235 CHAVSr0iRaw += ADsignal1[index+10][0][0]
20236 CHBVSr0iRaw += ADsignal1[index+10][1][0]
20237 CHAISr0iRaw += ADsignal1[index+10][0][1]
20238 CHBISr0iRaw += ADsignal1[index+10][1][1]
20240 CHAVSr0iRaw = CHAVSr0iRaw / 1000.0
20241 CHAISr0iRaw = CHAISr0iRaw / 1000.0
20242 CHBVSr0iRaw = CHBVSr0iRaw / 1000.0
20243 CHBISr0iRaw = CHBISr0iRaw / 1000.0
20244 VString =
"CA 2.5 Src 0 I" +
' {0:.4f} '.format(CHAISr0iRaw)
20245 labelSIA0.config(text = VString)
20246 VString =
"CB 2.5 Src 0 I" +
' {0:.4f} '.format(CHBISr0iRaw)
20247 labelSIB0.config(text = VString)
20250 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
20251 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
20252 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
20253 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
20254 CHA.mode = Mode.SIMV
20255 CHA.constant(0.045)
20256 CHB.mode = Mode.SIMV
20257 CHB.constant(0.045)
20258 ADsignal1 = devx.get_samples(1010)
20259 CHAVSr100Raw = CHAISr100Raw = CHBVSr100Raw = CHBISr100Raw = 0.0
20260 for index
in range(1000):
20261 CHAVSr100Raw += ADsignal1[index+10][0][0]
20262 CHBVSr100Raw += ADsignal1[index+10][1][0]
20263 CHAISr100Raw += ADsignal1[index+10][0][1]
20264 CHBISr100Raw += ADsignal1[index+10][1][1]
20266 CHAVSr100Raw = CHAVSr100Raw / 1000.0
20267 CHAISr100Raw = CHAISr100Raw / 1000.0
20268 CHBVSr100Raw = CHBVSr100Raw / 1000.0
20269 CHBISr100Raw = CHBISr100Raw / 1000.0
20270 VString =
"CA 50 Src +45 " +
' {0:.4f} '.format(CHAVSr100Raw)
20271 labelSIA.config(text = VString)
20272 VString =
"CB 50 Src +45 " +
' {0:.4f} '.format(CHBVSr100Raw)
20273 labelSIB.config(text = VString)
20276 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
20277 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
20278 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
20279 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
20280 CHA.mode = Mode.SIMV
20281 CHA.constant(-0.045)
20282 CHB.mode = Mode.SIMV
20283 CHB.constant(-0.045)
20284 ADsignal1 = devx.get_samples(1010)
20285 CHAVSrN45Raw = CHAISrN45Raw = CHBVSrN45Raw = CHBISrN45Raw = 0.0
20286 for index
in range(1000):
20287 CHAVSrN45Raw += ADsignal1[index+10][0][0]
20288 CHBVSrN45Raw += ADsignal1[index+10][1][0]
20289 CHAISrN45Raw += ADsignal1[index+10][0][1]
20290 CHBISrN45Raw += ADsignal1[index+10][1][1]
20292 CHAVSrN45Raw = CHAVSrN45Raw / 1000.0
20293 CHAISrN45Raw = CHAISrN45Raw / 1000.0
20294 CHBVSrN45Raw = CHBVSrN45Raw / 1000.0
20295 CHBISrN45Raw = CHBISrN45Raw / 1000.0
20296 VString =
"CA 50 Src -45 " +
' {0:.4f} '.format(CHAVSrN45Raw)
20297 labelSIAN.config(text = VString)
20298 VString =
"CB 50 Src -45 " +
' {0:.4f} '.format(CHBVSrN45Raw)
20299 labelSIBN.config(text = VString)
20301 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
20302 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
20303 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
20304 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
20307 CHAF25V = CHAF25vRaw * ( AD584act / CHA584Raw )
20308 CHBF25V = CHBF25vRaw * ( AD584act / CHB584Raw )
20310 CHASr5v = CHASr5vRaw * ( AD584act / CHA584Raw )
20311 CHBSr5v = CHBSr5vRaw * ( AD584act / CHB584Raw )
20313 CHA2p5 = CHA2p5Raw * ( AD584act / CHA584Raw )
20315 CHB2p5 = CHB2p5Raw * ( AD584act / CHB584Raw )
20318 CHAActSrI = CHASr5v / OnBoardRes
20319 CHBActSrI = CHBSr5v / OnBoardRes
20321 CHAActSnkI = CHASr0vRaw - CHA2p5 / OnBoardRes
20322 CHBActSnkI = CHBSr0vRaw - CHB2p5 / OnBoardRes
20324 CHASr0i = CHAVSr0iRaw * ( AD584act / CHA584Raw )
20325 CHASr0iAct = CHASr0i / OnBoardRes
20326 CHASr100 = CHAVSr100Raw * ( AD584act / CHA584Raw )
20327 CHASrI100Act = (CHASr100 - CHA2p5) / OnBoardRes
20328 CHASrN45 = CHAVSrN45Raw * ( AD584act / CHA584Raw )
20329 CHASrIN45Act = (CHASrN45 - CHA2p5) / OnBoardRes
20331 CHBSr0i = CHBVSr0iRaw * ( AD584act / CHB584Raw )
20332 CHBSr0iAct = CHBSr0i / OnBoardRes
20333 CHBSr100 = CHBVSr100Raw * ( AD584act / CHB584Raw )
20334 CHBSrI100Act = (CHBSr100 - CHB2p5) / OnBoardRes
20335 CHBSrN45 = CHBVSrN45Raw * ( AD584act / CHB584Raw )
20336 CHBSrIN45Act = (CHBSrN45 - CHB2p5) / OnBoardRes
20339 CalFile.write(
'# Channel A, measure V\n')
20340 CalFile.write(
'</>\n')
20341 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAGndRaw) +
'>\n')
20342 CalFile.write(
'<' +
'{0:.4f}'.format(AD584act) +
', ' +
'{0:.4f}'.format(CHA584Raw) +
'>\n')
20343 CalFile.write(
'<>\n')
20344 CalFile.write(
'\n')
20346 CalFile.write(
'# Channel A, measure I\n')
20347 CalFile.write(
'</>\n')
20348 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAI02p5Raw) +
'>\n')
20349 CalFile.write(
'<' +
'{0:.4f}'.format(CHAActSrI) +
', ' +
'{0:.4f}'.format(CHAISr5vRaw) +
'>\n')
20351 CalFile.write(
'<' +
'{0:.4f}'.format(-CHAActSrI) +
', ' +
'{0:.4f}'.format(-CHAISr5vRaw) +
'>\n')
20352 CalFile.write(
'<>\n')
20353 CalFile.write(
'\n')
20355 CalFile.write(
'# Channel A, source V\n')
20356 CalFile.write(
'</>\n')
20357 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAF0vRaw) +
'>\n')
20358 CalFile.write(
'<4.5000, ' +
'{0:.4f}'.format(CHAF25V) +
'>\n')
20359 CalFile.write(
'<>\n')
20360 CalFile.write(
'\n')
20362 CalFile.write(
'# Channel A, source I\n')
20363 CalFile.write(
'</>\n')
20364 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAISr0iRaw) +
'>\n')
20365 CalFile.write(
'<0.045, ' +
'{0:.4f}'.format(CHASrI100Act) +
'>\n')
20366 CalFile.write(
'<-0.0450, ' +
'{0:.4f}'.format(CHASrIN45Act) +
'>\n')
20367 CalFile.write(
'<>\n')
20368 CalFile.write(
'\n')
20370 CalFile.write(
'# Channel B, measure V\n')
20371 CalFile.write(
'</>\n')
20372 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBGndRaw) +
'>\n')
20373 CalFile.write(
'<' +
'{0:.4f}'.format(AD584act) +
', ' +
'{0:.4f}'.format(CHB584Raw) +
'>\n')
20374 CalFile.write(
'<>\n')
20375 CalFile.write(
'\n')
20377 CalFile.write(
'# Channel B, measure I\n')
20378 CalFile.write(
'</>\n')
20379 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBI02p5Raw) +
'>\n')
20380 CalFile.write(
'<' +
'{0:.4f}'.format(CHBActSrI) +
', ' +
'{0:.4f}'.format(CHBISr5vRaw) +
'>\n')
20382 CalFile.write(
'<' +
'{0:.4f}'.format(-CHBActSrI) +
', ' +
'{0:.4f}'.format(-CHBISr5vRaw) +
'>\n')
20383 CalFile.write(
'<>\n')
20384 CalFile.write(
'\n')
20386 CalFile.write(
'# Channel B, source V\n')
20387 CalFile.write(
'</>\n')
20388 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBF0vRaw) +
'>\n')
20389 CalFile.write(
'<4.5000, ' +
'{0:.4f}'.format(CHAF25V) +
'>\n')
20390 CalFile.write(
'<>\n')
20391 CalFile.write(
'\n')
20393 CalFile.write(
'# Channel B source I\n')
20394 CalFile.write(
'</>\n')
20395 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBISr0iRaw) +
'>\n')
20396 CalFile.write(
'<0.045, ' +
'{0:.4f}'.format(CHBSrI100Act) +
'>\n')
20397 CalFile.write(
'<-0.0450, ' +
'{0:.4f}'.format(CHBSrIN45Act) +
'>\n')
20398 CalFile.write(
'<>\n')
20401 showinfo(
"Finish",
"Successfully measured cal factors!", parent=calwindow)
20402 if askyesno(
"Write cal",
"Write Cal Data to Board?", parent=calwindow):
20403 devx.write_calibration(filename)
20407 CHA.mode = Mode.HI_Z_SPLIT
20408 CHB.mode = Mode.HI_Z_SPLIT
20412 calwindow.destroy()
20415 global cal, DevID, devx
20417 devidstr = DevID[17:31]
20418 filename =
"calib" + devidstr +
"test.txt"
20419 if os.path.isfile(filename):
20420 if askyesno(
"Calibration exists",
"A previous Calibration file exists. /n Do you want to load that?"):
20423 if askyesno(
"Continue?",
"Continure with save calibration file?"):
20426 calwindow.destroy()
20429 CalFile = open(filename,
"w")
20433 CalFile.write(
'# Channel A, measure V\n')
20434 CalFile.write(
'</>\n')
20435 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[0][0]) +
'>\n')
20436 CHAgp = (5.0/cal[0][1])+cal[0][0]
20437 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
20438 CalFile.write(
'<>\n')
20439 CalFile.write(
'\n')
20441 CalFile.write(
'# Channel A, measure I\n')
20442 CalFile.write(
'</>\n')
20443 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[1][0]) +
'>\n')
20444 CHAgp = (0.1/cal[0][1])+cal[1][0]
20445 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
20446 CHAgn = (-0.1/cal[0][2])+cal[1][0]
20447 CalFile.write(
'<-0.1000' +
'{0:.5f}'.format(CHAgn) +
'>\n')
20448 CalFile.write(
'<>\n')
20449 CalFile.write(
'\n')
20451 CalFile.write(
'# Channel A, source V\n')
20452 CalFile.write(
'</>\n')
20453 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[2][0]) +
'>\n')
20454 CHAgp = (5.0/cal[2][1])+cal[2][0]
20455 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
20456 CalFile.write(
'<>\n')
20457 CalFile.write(
'\n')
20459 CalFile.write(
'# Channel A, source I\n')
20460 CalFile.write(
'</>\n')
20461 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[3][0]) +
'>\n')
20462 CHAgp = (0.1/cal[3][1])+cal[3][0]
20463 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
20464 CHAgn = (-0.1/cal[3][2])+cal[3][0]
20465 CalFile.write(
'<-0.1000, ' +
'{0:.5f}'.format(CHAgn) +
'>\n')
20466 CalFile.write(
'<>\n')
20467 CalFile.write(
'\n')
20469 CalFile.write(
'# Channel B, measure V\n')
20470 CalFile.write(
'</>\n')
20471 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[4][0]) +
'>\n')
20472 CHAgp = (5.0/cal[4][1])+cal[4][0]
20473 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
20474 CalFile.write(
'<>\n')
20475 CalFile.write(
'\n')
20477 CalFile.write(
'# Channel B, measure I\n')
20478 CalFile.write(
'</>\n')
20479 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[5][0]) +
'>\n')
20480 CHAgp = (0.1/cal[5][1])+cal[5][0]
20481 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
20482 CHAgn = (-0.1/cal[5][2])+cal[5][0]
20483 CalFile.write(
'<-0.1000, ' +
'{0:.5f}'.format(CHAgn) +
'>\n')
20484 CalFile.write(
'<>\n')
20485 CalFile.write(
'\n')
20487 CalFile.write(
'# Channel B, source V\n')
20488 CalFile.write(
'</>\n')
20489 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[6][0]) +
'>\n')
20490 CHAgp = (5.0/cal[6][1])+cal[6][0]
20491 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
20492 CalFile.write(
'<>\n')
20493 CalFile.write(
'\n')
20495 CalFile.write(
'# Channel B source I\n')
20496 CalFile.write(
'</>\n')
20497 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[7][0]) +
'>\n')
20498 CHAgp = (0.1/cal[7][1])+cal[7][0]
20499 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
20500 CHAgn = (-0.1/cal[7][2])+cal[7][0]
20501 CalFile.write(
'<-0.1000, ' +
'{0:.5f}'.format(CHAgn) +
'>\n')
20502 CalFile.write(
'<>\n')
20508 global devx, PIO_0, PIO_1, PIO_2, PIO_3, SCLKPort, SDATAPort, SLATCHPort
20510 binstr = bin(DValue)
20511 binlen = len(binstr)
20512 datastr = binstr[2:binlen]
20513 datalen = len(datastr)
20515 datastr = str.rjust(datastr , 16 ,
'0')
20516 datalen = len(datastr)
20518 devx.ctrl_transfer(0x40, 0x50, SLATCHPort.get(), 0, 0, 0, 100)
20519 while i < datalen+1:
20521 D1code = 0x50 + int(datastr[i-1])
20522 devx.ctrl_transfer(0x40, D1code, SDATAPort.get(), 0, 0, 0, 100)
20523 devx.ctrl_transfer(0x40, 0x51, SCLKPort.get(), 0, 0, 0, 100)
20524 devx.ctrl_transfer(0x40, 0x50, SCLKPort.get(), 0, 0, 0, 100)
20525 devx.ctrl_transfer(0x40, 0x51, SCLKPort.get(), 0, 0, 0, 100)
20527 devx.ctrl_transfer(0x40, 0x51, SLATCHPort.get(), 0, 0, 0, 100)
20530 global FminEntry, HtMulEntry, MinigenFout, MinigenMode, etssrlab, EnableMinigenMode
20531 global Two28, mclk, EnableHSsampling, MinigenScreenStatus, ETSts, Two_X_Sample
20534 if MinigenScreenStatus.get() == 0:
20539 if EnableMinigenMode == 2:
20540 MinigenMode.set(40)
20543 FminE = float(eval(FminEntry.get()))*1000
20545 if EnableHSsampling > 0:
20546 FminEntry.delete(0,END)
20547 FminEntry.insert(0, FminE/1000)
20551 Fmin = FminE - (FminE/MulX)
20553 MinigenFout.delete(0,
"end")
20554 MinigenFout.insert(0,Fmin)
20560 global MinigenFclk, MinigenFout, MinigenMode
20561 global Two28, SCLKPort, SDATAPort, SLATCHPort
20563 DValue = 8192 + MinigenMode.get()
20566 fout = float(eval(MinigenFout.get()))
20568 MinigenFout.delete(0,
"end")
20569 MinigenFout.insert(0,100)
20571 mclk = float(eval(MinigenFclk.get()))*1000000
20573 MingenFclk.delete(0,
"end")
20574 MinigenFclk.insert(0,16)
20575 Freg = int((fout*Two28)/mclk)
20576 Foutstr = bin(Freg)
20577 Foutlen = len(Foutstr)
20578 datastr = Foutstr[2:Foutlen]
20579 datalen = len(datastr)
20581 datastr = str.rjust(datastr , 28 ,
'0')
20582 datalen = len(datastr)
20583 Fmsb =
'0b01' + datastr[0:14]
20584 Flsb =
'0b01' + datastr[14:]
20585 FValue = int(eval(Flsb))
20587 FValue = int(eval(Fmsb))
20592 global RevDate, minigenwindow, MinigenMode, MinigenScreenStatus, MinigenFclk, MinigenFout, SWRev
20593 global SCLKPort, SDATAPort, SLATCHPort
20594 global GenericSerialStatus
20595 global PIO_0, PIO_1, PIO_2, PIO_3
20597 if GenericSerialStatus.get() == 1:
20598 GenericSerialStatus.set(0)
20600 if MinigenScreenStatus.get() == 0:
20601 MinigenScreenStatus.set(1)
20602 minigenwindow = Toplevel()
20603 minigenwindow.title(
"-AD983x DDS- " + SWRev + RevDate)
20604 minigenwindow.resizable(FALSE,FALSE)
20605 minigenwindow.protocol(
"WM_DELETE_WINDOW", DestroyMinigenScreen)
20607 MinigenMode = IntVar(0)
20608 mgb1 = Radiobutton(minigenwindow, text=
"Sine", variable=MinigenMode, value=0, command=BSendMG )
20609 mgb1.grid(row=1, column=0, sticky=W)
20610 mgb2 = Radiobutton(minigenwindow, text=
"Triangle", variable=MinigenMode, value=2, command=BSendMG )
20611 mgb2.grid(row=1, column=1, columnspan=2, sticky=W)
20612 mgb3 = Radiobutton(minigenwindow, text=
"Square", variable=MinigenMode, value=40, command=BSendMG )
20613 mgb3.grid(row=2, column=0, sticky=W)
20614 mgb4 = Radiobutton(minigenwindow, text=
"Square/2", variable=MinigenMode, value=32, command=BSendMG )
20615 mgb4.grid(row=2, column=1, columnspan=2, sticky=W)
20616 f0lab = Label(minigenwindow, text=
"Mclk in MHz")
20617 f0lab.grid(row=3, column=0, columnspan=2, sticky=W)
20618 MinigenFclk = Entry(minigenwindow, width=5)
20619 MinigenFclk.grid(row=3, column=1, columnspan=2, sticky=W, padx=6)
20620 MinigenFclk.delete(0,
"end")
20621 MinigenFclk.insert(0,16)
20622 f1lab = Label(minigenwindow, text=
"Output Freq")
20623 f1lab.grid(row=4, column=0, columnspan=2, sticky=W)
20624 MinigenFout = Entry(minigenwindow, width=8, cursor=
'double_arrow')
20625 MinigenFout.bind(
'<MouseWheel>', onMiniGenScroll)
20626 MinigenFout.bind(
"<Button-4>", onMiniGenScroll)
20627 MinigenFout.bind(
"<Button-5>", onMiniGenScroll)
20628 MinigenFout.grid(row=4, column=1, columnspan=2, sticky=W)
20629 MinigenFout.delete(0,
"end")
20630 MinigenFout.insert(0,100)
20631 bsn1 = Button(minigenwindow, text=
'UpDate', style=
"W7.TButton", command=BSendMG)
20632 bsn1.grid(row=5, column=0, sticky=W, pady=4)
20633 dismissmgbutton = Button(minigenwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyMinigenScreen)
20634 dismissmgbutton.grid(row=5, column=1, columnspan=2, sticky=W, pady=4)
20636 label3 = Label(minigenwindow,text=
"SCLK PI/O Port ")
20637 label3.grid(row=6, column=0, sticky=W)
20638 sclk1 = Radiobutton(minigenwindow, text=
"0", variable=SCLKPort, value=PIO_0)
20639 sclk1.grid(row=6, column=1, sticky=W)
20640 sclk2 = Radiobutton(minigenwindow, text=
"1", variable=SCLKPort, value=PIO_1)
20641 sclk2.grid(row=6, column=2, sticky=W)
20642 sclk3 = Radiobutton(minigenwindow, text=
"2", variable=SCLKPort, value=PIO_2)
20643 sclk3.grid(row=6, column=3, sticky=W)
20644 sclk4 = Radiobutton(minigenwindow, text=
"3", variable=SCLKPort, value=PIO_3)
20645 sclk4.grid(row=6, column=4, sticky=W)
20647 label4 = Label(minigenwindow,text=
"SData PI/O Port ")
20648 label4.grid(row=7, column=0, sticky=W)
20649 sdat1 = Radiobutton(minigenwindow, text=
"0", variable=SDATAPort, value=PIO_0)
20650 sdat1.grid(row=7, column=1, sticky=W)
20651 sdat2 = Radiobutton(minigenwindow, text=
"1", variable=SDATAPort, value=PIO_1)
20652 sdat2.grid(row=7, column=2, sticky=W)
20653 sdat3 = Radiobutton(minigenwindow, text=
"2", variable=SDATAPort, value=PIO_2)
20654 sdat3.grid(row=7, column=3, sticky=W)
20655 sdat4 = Radiobutton(minigenwindow, text=
"3", variable=SDATAPort, value=PIO_3)
20656 sdat4.grid(row=7, column=4, sticky=W)
20658 label5 = Label(minigenwindow,text=
"FSync PI/O Port ")
20659 label5.grid(row=8, column=0, sticky=W)
20660 slth1 = Radiobutton(minigenwindow, text=
"0", variable=SLATCHPort, value=PIO_0)
20661 slth1.grid(row=8, column=1, sticky=W)
20662 slth2 = Radiobutton(minigenwindow, text=
"1", variable=SLATCHPort, value=PIO_1)
20663 slth2.grid(row=8, column=2, sticky=W)
20664 slth3 = Radiobutton(minigenwindow, text=
"2", variable=SLATCHPort, value=PIO_2)
20665 slth3.grid(row=8, column=3, sticky=W)
20666 slth4 = Radiobutton(minigenwindow, text=
"3", variable=SLATCHPort, value=PIO_3)
20667 slth4.grid(row=8, column=4, sticky=W)
20672 global minigenwindow, MinigenScreenStatus
20674 MinigenScreenStatus.set(0)
20675 minigenwindow.destroy()
20678 global ETSStatus, ETSDisp
20686 global PIO_0, PIO_1, PIO_2, PIO_3
20688 binstr = bin(D1Value)
20689 binlen = len(binstr)
20690 data1str = binstr[2:binlen]
20691 datalen = len(data1str)
20693 data1str = str.rjust(data1str , 16 ,
'0')
20694 datalen = len(data1str)
20696 binstr = bin(D2Value)
20697 binlen = len(binstr)
20698 data2str = binstr[2:binlen]
20699 datalen = len(data2str)
20701 data2str = str.rjust(data2str , 16 ,
'0')
20702 datalen = len(data2str)
20709 devx.ctrl_transfer(0x40, 0x50, 0, 0, 0, 0, 100)
20710 while i < datalen+1:
20712 D1code = 0x50 + int(data1str[i-1])
20713 D2code = 0x50 + int(data2str[i-1])
20714 devx.ctrl_transfer(0x40, D1code, PIO_1, 0, 0, 0, 100)
20715 devx.ctrl_transfer(0x40, D2code, PIO_2, 0, 0, 0, 100)
20716 devx.ctrl_transfer(0x40, 0x51, PIO_3, 0, 0, 0, 100)
20717 devx.ctrl_transfer(0x40, 0x50, PIO_3, 0, 0, 0, 100)
20718 devx.ctrl_transfer(0x40, 0x51, PIO_3, 0, 0, 0, 100)
20720 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
20723 global DAC1Entry, DAC2Entry, DAC3Entry, DAC4Entry, REFEntry
20726 RefValue = float(eval(REFEntry.get()))
20730 D1Value = float(eval(DAC1Entry.get()))
20733 D1Code = int((D1Value/RefValue)*255)
20736 D1Code = D1Code + 0x2000
20738 D2Value = float(eval(DAC2Entry.get()))
20741 D2Code = int((D2Value/RefValue)*255)
20744 D2Code = D2Code + 0x2400
20746 D3Value = float(eval(DAC3Entry.get()))
20749 D3Code = int((D3Value/RefValue)*255)
20752 D3Code = D3Code + 0x2000
20754 D4Value = float(eval(DAC4Entry.get()))
20757 D4Code = int((D4Value/RefValue)*255)
20760 D4Code = D4Code + 0x2400
20767 global da1window, DA1ScreenStatus, DAC1Entry, DAC2Entry, DAC3Entry, DAC4Entry
20768 global REFEntry, RevDate, SWRev
20770 if DA1ScreenStatus.get() == 0:
20771 DA1ScreenStatus.set(1)
20772 da1window = Toplevel()
20773 da1window.title(
"-DA1 PMOD- " + SWRev + RevDate)
20774 da1window.resizable(FALSE,FALSE)
20775 da1window.protocol(
"WM_DELETE_WINDOW", DestroyDA1Screen)
20777 d1lab = Label(da1window, text=
"DAC A1 output")
20778 d1lab.grid(row=0, column=0, columnspan=1, sticky=W)
20779 DAC1Entry = Entry(da1window, width=5)
20780 DAC1Entry.grid(row=0, column=1, sticky=W)
20781 DAC1Entry.delete(0,
"end")
20782 DAC1Entry.insert(0,0)
20783 d2lab = Label(da1window, text=
"DAC B1 output")
20784 d2lab.grid(row=1, column=0, columnspan=1, sticky=W)
20785 DAC2Entry = Entry(da1window, width=5)
20786 DAC2Entry.grid(row=1, column=1, sticky=W)
20787 DAC2Entry.delete(0,
"end")
20788 DAC2Entry.insert(0,0)
20790 d3lab = Label(da1window, text=
"DAC A2 output")
20791 d3lab.grid(row=2, column=0, columnspan=1, sticky=W)
20792 DAC3Entry = Entry(da1window, width=5)
20793 DAC3Entry.grid(row=2, column=1, sticky=W)
20794 DAC3Entry.delete(0,
"end")
20795 DAC3Entry.insert(0,0)
20797 d4lab = Label(da1window, text=
"DAC B2 output")
20798 d4lab.grid(row=3, column=0, columnspan=1, sticky=W)
20799 DAC4Entry = Entry(da1window, width=5)
20800 DAC4Entry.grid(row=3, column=1, sticky=W)
20801 DAC4Entry.delete(0,
"end")
20802 DAC4Entry.insert(0,0)
20804 d5lab = Label(da1window, text=
"Reference V")
20805 d5lab.grid(row=4, column=0, columnspan=1, sticky=W)
20806 REFEntry = Entry(da1window, width=5)
20807 REFEntry.grid(row=4, column=1, sticky=W)
20808 REFEntry.delete(0,
"end")
20809 REFEntry.insert(0,3.3)
20811 bsn1 = Button(da1window, text=
'UpDate', style=
"W7.TButton", command=BSendDA1)
20812 bsn1.grid(row=5, column=0, sticky=W)
20813 dismissdabutton = Button(da1window, text=
"Dismiss", style=
"W8.TButton", command=DestroyDA1Screen)
20814 dismissdabutton.grid(row=5, column=1, sticky=W, pady=4)
20818 global da1window, DA1ScreenStatus
20820 DA1ScreenStatus.set(0)
20821 da1window.destroy()
20824 global devx, SingleDualPot
20825 global PIO_0, PIO_1, PIO_2, PIO_3
20827 binstr = bin(DValue)
20828 binlen = len(binstr)
20829 datastr = binstr[2:binlen]
20830 datalen = len(datastr)
20831 if SingleDualPot.get() == 0:
20833 datastr = str.rjust(datastr , 10 ,
'0')
20834 datalen = len(datastr)
20835 if SingleDualPot.get() == 1:
20837 datastr = str.rjust(datastr , 8 ,
'0')
20838 datalen = len(datastr)
20839 if SingleDualPot.get() == 2:
20841 datastr = str.rjust(datastr , 8 ,
'0')
20842 datalen = len(datastr)
20844 devx.ctrl_transfer(0x40, 0x50, PIO_3, 0, 0, 0, 100)
20845 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
20846 while i < datalen+1:
20851 D1code = 0x50 + int(datastr[i-1])
20852 devx.ctrl_transfer(0x40, D1code, PIO_1, 0, 0, 0, 100)
20853 devx.ctrl_transfer(0x40, 0x51, PIO_3, 0, 0, 0, 100)
20854 devx.ctrl_transfer(0x40, 0x50, PIO_3, 0, 0, 0, 100)
20856 devx.ctrl_transfer(0x40, 0x51, 0, 0, 0, 0, 100)
20859 global DigPot1, DigPot2, DigPot3, DigPot4, SendPot1, SendPot2, SendPot3, SendPot4
20860 global SingleDualPot
20862 if SingleDualPot.get() == 0
or SingleDualPot.get() == 1:
20864 if SingleDualPot.get() == 2:
20867 DValue1 = DigPot1.get()
20868 if DValue1 > NumTaps:
20873 DValue2 = DigPot2.get()
20874 if DValue2 > NumTaps:
20879 DValue3 = DigPot3.get()
20880 if DValue3 > NumTaps:
20885 DValue4 = DigPot4.get()
20886 if DValue4 > NumTaps:
20890 if SendPot1.get() > 0:
20892 if SendPot2.get() > 0:
20894 if SendPot3.get() > 0:
20896 if SendPot4.get() > 0:
20900 global SingleDualPot, DPotlabel, DigPot1, DigPot2, DigPot3, DigPot4
20902 if SingleDualPot.get() == 0
or SingleDualPot.get() == 1:
20903 DPotlabel.config(text=
"Enter number from 0 to 255")
20904 DigPot1.config(from_=0, to=255, length=256)
20905 DigPot2.config(from_=0, to=255, length=256)
20906 DigPot3.config(from_=0, to=255, length=256)
20907 DigPot4.config(from_=0, to=255, length=256)
20908 if SingleDualPot.get() == 2:
20909 DPotlabel.config(text=
"Enter number from 0 to 63")
20910 DigPot1.config(from_=0, to=63, length=64)
20911 DigPot2.config(from_=0, to=63, length=64)
20912 DigPot3.config(from_=0, to=63, length=64)
20913 DigPot4.config(from_=0, to=63, length=64)
20917 global digpotwindow, DigPotScreenStatus, DigPot1, DigPot2, DigPot3, DigPot4, RevDate
20918 global SendPot1, SendPot2, SendPot3, SendPot4, SingleDualPot, SWRev
20919 global DPotlabel, DigPot1, DigPot2, DigPot3, DigPot4
20921 if DigPotScreenStatus.get() == 0:
20922 DigPotScreenStatus.set(1)
20923 digpotwindow = Toplevel()
20924 digpotwindow.title(
"Digital Potentiometer " + SWRev + RevDate)
20925 digpotwindow.resizable(FALSE,FALSE)
20926 digpotwindow.protocol(
"WM_DELETE_WINDOW", DestroyDigPotScreen)
20928 SendPot1 = IntVar(0)
20930 SendPot2 = IntVar(0)
20932 SendPot3 = IntVar(0)
20934 SendPot4 = IntVar(0)
20936 DPotlabel = Label(digpotwindow,text=
"Enter number from 0 to 255", style=
"A12B.TLabel")
20937 DPotlabel.grid(row=0, column=0, columnspan=3, sticky=W)
20939 SingleDualPot = IntVar(0)
20940 SingleDualPot.set(0)
20941 CompMenu = Menubutton(digpotwindow, text=
"Sel Comp.", style=
"W8.TButton")
20942 CompMenu.menu = Menu(CompMenu, tearoff = 0 )
20943 CompMenu[
"menu"] = CompMenu.menu
20944 CompMenu.menu.add_radiobutton(label=
"AD840X", variable=SingleDualPot, value=0, command=UpdatePotSlider)
20945 CompMenu.menu.add_radiobutton(label=
"AD5160", variable=SingleDualPot, value=1, command=UpdatePotSlider)
20946 CompMenu.menu.add_radiobutton(label=
"AD5203", variable=SingleDualPot, value=2, command=UpdatePotSlider)
20947 CompMenu.grid(row=1, column=0, columnspan=2, sticky=W)
20948 lab1 = Checkbutton(digpotwindow,text=
"Pot 1", variable=SendPot1)
20949 lab1.grid(row=2, column=0, sticky=W)
20950 DigPot1 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
20951 DigPot1.grid(row=3, column=0, columnspan=3, sticky=W)
20952 lab2 = Checkbutton(digpotwindow,text=
"Pot 2", variable=SendPot2)
20953 lab2.grid(row=4, column=0, sticky=W)
20954 DigPot2 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
20955 DigPot2.grid(row=5, column=0, columnspan=3, sticky=W)
20956 lab3 = Checkbutton(digpotwindow,text=
"Pot 3", variable=SendPot3)
20957 lab3.grid(row=6, column=0, sticky=W)
20958 DigPot3 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
20959 DigPot3.grid(row=7, column=0, columnspan=3, sticky=W)
20960 lab4 = Checkbutton(digpotwindow,text=
"Pot 4", variable=SendPot4)
20961 lab4.grid(row=8, column=0, sticky=W)
20962 DigPot4 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
20963 DigPot4.grid(row=9, column=0, columnspan=3, sticky=W)
20964 dismissdpbutton = Button(digpotwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyDigPotScreen)
20965 dismissdpbutton.grid(row=10, column=0, sticky=W, pady=4)
20968 global digpotwindow, DigPotScreenStatus
20970 DigPotScreenStatus.set(0)
20971 digpotwindow.destroy()
20974 global serialwindow, GenericSerialStatus, SCLKPort, SDATAPort, SLATCHPort, SLatchPhase, SClockPhase
20975 global NumBitsEntry, DataBitsEntry, devx, SerDirection, DValue, NumBits, AD5626SerialStatus, AD5626Entry
20977 if AD5626SerialStatus.get() == 0:
20979 DValue = int(eval(DataBitsEntry.get()))
20985 NumBits = int(NumBitsEntry.get())
20992 DValue = int(eval(AD5626Entry.get())*1000)
20995 AD5626Entry.delete(0,
"end")
20996 AD5626Entry.insert(0,
'0.000')
20999 AD5626Entry.delete(0,
"end")
21000 AD5626Entry.insert(0,DValue/1000.0)
21003 AD5626Entry.delete(0,
"end")
21004 AD5626Entry.insert(0,
'0.000')
21007 binstr = bin(DValue)
21008 binlen = len(binstr)
21009 datastr = binstr[2:binlen]
21010 datalen = len(datastr)
21011 if datalen < NumBits:
21012 datastr = str.rjust(datastr , NumBits ,
'0')
21013 datalen = len(datastr)
21014 if SLatchPhase.get() == 0:
21020 if AD5626SerialStatus.get() > 0:
21023 if SClockPhase.get() == 0:
21029 devx.ctrl_transfer(0x40, ClockInt, SCLKPort.get(), 0, 0, 0, 100)
21030 devx.ctrl_transfer(0x40, LatchInt, SLATCHPort.get(), 0, 0, 0, 100)
21032 while i < datalen+1:
21033 if SerDirection.get() == 1:
21034 D1code = 0x50 + int(datastr[datalen-i])
21036 D1code = 0x50 + int(datastr[i-1])
21037 devx.ctrl_transfer(0x40, D1code, SDATAPort.get(), 0, 0, 0, 100)
21038 devx.ctrl_transfer(0x40, ClockEnd, SCLKPort.get(), 0, 0, 0, 100)
21039 devx.ctrl_transfer(0x40, ClockInt, SCLKPort.get(), 0, 0, 0, 100)
21041 devx.ctrl_transfer(0x40, ClockEnd, SCLKPort.get(), 0, 0, 0, 100)
21042 devx.ctrl_transfer(0x40, LatchEnd, SLATCHPort.get(), 0, 0, 0, 100)
21043 devx.ctrl_transfer(0x40, LatchInt, SLATCHPort.get(), 0, 0, 0, 100)
21044 devx.ctrl_transfer(0x40, LatchEnd, SLATCHPort.get(), 0, 0, 0, 100)
21048 global ad5626window, AD5626SerialStatus, SCLKPort, SDATAPort, SLATCHPort, SLatchPhase, SClockPhase
21049 global GenericSerialStatus, AD5626Entry, SerDirection, SWRev
21050 global PIO_0, PIO_1, PIO_2, PIO_3
21052 if GenericSerialStatus.get() == 1:
21053 GenericSerialStatus.set(0)
21055 if AD5626SerialStatus.get() == 0:
21056 AD5626SerialStatus.set(1)
21057 ad5626window = Toplevel()
21058 ad5626window.title(
"AD5626 Output " + SWRev + RevDate)
21059 ad5626window.resizable(FALSE,FALSE)
21060 ad5626window.protocol(
"WM_DELETE_WINDOW", DestroyAD5626Screen)
21062 SLatchPhase = IntVar(0)
21064 SClockPhase = IntVar(0)
21066 SerDirection = IntVar(0)
21067 SerDirection.set(0)
21069 label2 = Label(ad5626window,text=
"Enter Output Volts")
21070 label2.grid(row=1, column=0, columnspan=1, sticky=W)
21071 AD5626Entry = Entry(ad5626window, width=10, cursor=
'double_arrow')
21072 AD5626Entry.bind(
'<MouseWheel>', onAD5626Scroll)
21073 AD5626Entry.bind(
"<Button-4>", onAD5626Scroll)
21074 AD5626Entry.bind(
"<Button-5>", onAD5626Scroll)
21075 AD5626Entry.grid(row=1, column=1, columnspan=3, sticky=W)
21076 AD5626Entry.delete(0,
"end")
21077 AD5626Entry.insert(0,
'0.000')
21079 label3 = Label(ad5626window,text=
"SCLK PI/O Port ")
21080 label3.grid(row=2, column=0, columnspan=1, sticky=W)
21081 sclk1 = Radiobutton(ad5626window, text=
"0", variable=SCLKPort, value=PIO_0)
21082 sclk1.grid(row=2, column=1, sticky=W)
21083 sclk2 = Radiobutton(ad5626window, text=
"1", variable=SCLKPort, value=PIO_1)
21084 sclk2.grid(row=2, column=2, sticky=W)
21085 sclk3 = Radiobutton(ad5626window, text=
"2", variable=SCLKPort, value=PIO_2)
21086 sclk3.grid(row=2, column=3, sticky=W)
21087 sclk4 = Radiobutton(ad5626window, text=
"3", variable=SCLKPort, value=PIO_3)
21088 sclk4.grid(row=2, column=4, sticky=W)
21090 label4 = Label(ad5626window,text=
"SData PI/O Port ")
21091 label4.grid(row=3, column=0, columnspan=1, sticky=W)
21092 sdat1 = Radiobutton(ad5626window, text=
"0", variable=SDATAPort, value=PIO_0)
21093 sdat1.grid(row=3, column=1, sticky=W)
21094 sdat2 = Radiobutton(ad5626window, text=
"1", variable=SDATAPort, value=PIO_1)
21095 sdat2.grid(row=3, column=2, sticky=W)
21096 sdat3 = Radiobutton(ad5626window, text=
"2", variable=SDATAPort, value=PIO_2)
21097 sdat3.grid(row=3, column=3, sticky=W)
21098 sdat4 = Radiobutton(ad5626window, text=
"3", variable=SDATAPort, value=PIO_3)
21099 sdat4.grid(row=3, column=4, sticky=W)
21101 label5 = Label(ad5626window,text=
"Latch PI/O Port ")
21102 label5.grid(row=4, column=0, columnspan=1, sticky=W)
21103 slth1 = Radiobutton(ad5626window, text=
"0", variable=SLATCHPort, value=PIO_0)
21104 slth1.grid(row=4, column=1, sticky=W)
21105 slth2 = Radiobutton(ad5626window, text=
"1", variable=SLATCHPort, value=PIO_1)
21106 slth2.grid(row=4, column=2, sticky=W)
21107 slth3 = Radiobutton(ad5626window, text=
"2", variable=SLATCHPort, value=PIO_2)
21108 slth3.grid(row=4, column=3, sticky=W)
21109 slth4 = Radiobutton(ad5626window, text=
"3", variable=SLATCHPort, value=PIO_3)
21110 slth4.grid(row=4, column=4, sticky=W)
21112 bsn1 = Button(ad5626window, text=
'Send', style=
"W5.TButton", command=BSendGS)
21113 bsn1.grid(row=5, column=0, sticky=W)
21114 dismissgsbutton = Button(ad5626window, text=
"Dismiss", style=
"W8.TButton", command=DestroyAD5626Screen)
21115 dismissgsbutton.grid(row=5, column=1, columnspan=2, sticky=W, pady=4)
21122 global ad5626window, AD5626SerialStatus
21124 AD5626SerialStatus.set(0)
21125 ad5626window.destroy()
21128 global serialwindow, GenericSerialStatus, SCLKPort, SDATAPort, SLATCHPort, SLatchPhase, SClockPhase
21129 global NumBitsEntry, DataBitsEntry, SerDirection, RevDate, SWRev
21130 global PIO_0, PIO_1, PIO_2, PIO_3
21132 if GenericSerialStatus.get() == 0:
21133 GenericSerialStatus.set(1)
21134 serialwindow = Toplevel()
21135 serialwindow.title(
"Generic Serial Output " + SWRev + RevDate)
21136 serialwindow.resizable(FALSE,FALSE)
21137 serialwindow.protocol(
"WM_DELETE_WINDOW", DestroyGenericSerialScreen)
21139 SCLKPort = IntVar(0)
21140 SCLKPort.set(PIO_2)
21141 SDATAPort = IntVar(0)
21142 SDATAPort.set(PIO_1)
21143 SLATCHPort = IntVar(0)
21144 SLATCHPort.set(PIO_0)
21145 SLatchPhase = IntVar(0)
21146 SClockPhase = IntVar(0)
21147 SerDirection = IntVar(0)
21148 label = Label(serialwindow,text=
"Enter number of Bits")
21149 label.grid(row=1, column=0, columnspan=2, sticky=W)
21150 NumBitsEntry = Entry(serialwindow, width=3)
21151 NumBitsEntry.grid(row=1, column=2, sticky=W)
21152 NumBitsEntry.delete(0,
"end")
21153 NumBitsEntry.insert(0,8)
21155 label2 = Label(serialwindow,text=
"Enter Data Word")
21156 label2.grid(row=2, column=0, columnspan=1, sticky=W)
21157 DataBitsEntry = Entry(serialwindow, width=10)
21158 DataBitsEntry.grid(row=2, column=1, columnspan=3, sticky=W)
21159 DataBitsEntry.delete(0,
"end")
21160 DataBitsEntry.insert(0,0)
21162 label3 = Label(serialwindow,text=
"SCLK PI/O Port ")
21163 label3.grid(row=3, column=0, columnspan=1, sticky=W)
21164 sclk1 = Radiobutton(serialwindow, text=
"0", variable=SCLKPort, value=PIO_0)
21165 sclk1.grid(row=3, column=1, sticky=W)
21166 sclk2 = Radiobutton(serialwindow, text=
"1", variable=SCLKPort, value=PIO_1)
21167 sclk2.grid(row=3, column=2, sticky=W)
21168 sclk3 = Radiobutton(serialwindow, text=
"2", variable=SCLKPort, value=PIO_2)
21169 sclk3.grid(row=3, column=3, sticky=W)
21170 sclk4 = Radiobutton(serialwindow, text=
"3", variable=SCLKPort, value=PIO_3)
21171 sclk4.grid(row=3, column=4, sticky=W)
21173 label4 = Label(serialwindow,text=
"SData PI/O Port ")
21174 label4.grid(row=4, column=0, columnspan=1, sticky=W)
21175 sdat1 = Radiobutton(serialwindow, text=
"0", variable=SDATAPort, value=PIO_0)
21176 sdat1.grid(row=4, column=1, sticky=W)
21177 sdat2 = Radiobutton(serialwindow, text=
"1", variable=SDATAPort, value=PIO_1)
21178 sdat2.grid(row=4, column=2, sticky=W)
21179 sdat3 = Radiobutton(serialwindow, text=
"2", variable=SDATAPort, value=PIO_2)
21180 sdat3.grid(row=4, column=3, sticky=W)
21181 sdat4 = Radiobutton(serialwindow, text=
"3", variable=SDATAPort, value=PIO_3)
21182 sdat4.grid(row=4, column=4, sticky=W)
21184 label5 = Label(serialwindow,text=
"Latch PI/O Port ")
21185 label5.grid(row=5, column=0, columnspan=1, sticky=W)
21186 slth1 = Radiobutton(serialwindow, text=
"0", variable=SLATCHPort, value=PIO_0)
21187 slth1.grid(row=5, column=1, sticky=W)
21188 slth2 = Radiobutton(serialwindow, text=
"1", variable=SLATCHPort, value=PIO_1)
21189 slth2.grid(row=5, column=2, sticky=W)
21190 slth3 = Radiobutton(serialwindow, text=
"2", variable=SLATCHPort, value=PIO_2)
21191 slth3.grid(row=5, column=3, sticky=W)
21192 slth4 = Radiobutton(serialwindow, text=
"3", variable=SLATCHPort, value=PIO_3)
21193 slth4.grid(row=5, column=4, sticky=W)
21195 label6 = Label(serialwindow,text=
"Latch Phase ")
21196 label6.grid(row=6, column=0, columnspan=1, sticky=W)
21197 sph1 = Radiobutton(serialwindow, text=
"0", variable=SLatchPhase, value=0)
21198 sph1.grid(row=6, column=1, sticky=W)
21199 sph2 = Radiobutton(serialwindow, text=
"1", variable=SLatchPhase, value=1)
21200 sph2.grid(row=6, column=2, sticky=W)
21202 label7 = Label(serialwindow,text=
"Clock Phase ")
21203 label7.grid(row=7, column=0, columnspan=1, sticky=W)
21204 sph7 = Radiobutton(serialwindow, text=
"0", variable=SClockPhase, value=0)
21205 sph7.grid(row=7, column=1, sticky=W)
21206 sph8 = Radiobutton(serialwindow, text=
"1", variable=SClockPhase, value=1)
21207 sph8.grid(row=7, column=2, sticky=W)
21209 sdir1 = Radiobutton(serialwindow, text=
"LSB First", variable=SerDirection, value=0 )
21210 sdir1.grid(row=8, column=0, sticky=W)
21211 sdir2 = Radiobutton(serialwindow, text=
"MSB First", variable=SerDirection, value=1 )
21212 sdir2.grid(row=8, column=1, columnspan=2, sticky=W)
21214 bsn1 = Button(serialwindow, text=
'Send', style=
"W5.TButton", command=BSendGS)
21215 bsn1.grid(row=9, column=0, sticky=W)
21216 dismissgsbutton = Button(serialwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyGenericSerialScreen)
21217 dismissgsbutton.grid(row=9, column=1, columnspan=2, sticky=W, pady=4)
21220 global serialwindow, GenericSerialStatus
21222 GenericSerialStatus.set(0)
21223 serialwindow.destroy()
21227 global digfltwindow, DigFiltStatus, RevDate, SWRev, DeBugMode
21228 global DigFiltA, DigFiltB, DifFiltALength, DifFiltBLength, DifFiltAFile, DifFiltBFile
21229 global DigFiltABoxCar, DigFiltBBoxCar, BCALenEntry, BCBLenEntry
21230 global BCASkewEntry, BCBSkewEntry, DigDeSkewA, DigDeSkewB
21231 global AWGFiltA, AWGALenEntry, AWGFiltABoxCar, AWGFiltALength, AWGFiltAFile
21232 global AWGFiltB, AWGBLenEntry, AWGFiltBBoxCar, AWGFiltBLength, AWGFiltBFile
21234 if DigFiltStatus.get() == 0:
21235 DigFiltStatus.set(1)
21236 digfltwindow = Toplevel()
21237 digfltwindow.title(
"Digital Filter " + SWRev + RevDate)
21238 digfltwindow.resizable(FALSE,FALSE)
21239 digfltwindow.protocol(
"WM_DELETE_WINDOW", DestroyDigFiltScreen)
21241 scriptbutton = Button(digfltwindow, text=
"Run Script", style=
"W11.TButton", command=RunScript)
21242 scriptbutton.grid(row=0, column=0, columnspan=1, sticky=W)
21243 dismissdfbutton = Button(digfltwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyDigFiltScreen)
21244 dismissdfbutton.grid(row=0, column=1, columnspan=1, sticky=W)
21245 frame2 = LabelFrame(digfltwindow, text=
"CH A Filter", style=
"A10R1.TLabelframe")
21246 frame3 = LabelFrame(digfltwindow, text=
"CH B Filter", style=
"A10R2.TLabelframe")
21249 frame2.grid(row=1, column=0, sticky=W)
21250 frame3.grid(row=1, column=1, sticky=W)
21251 frame4 = LabelFrame(digfltwindow, text=
"AWG A Filter", style=
"A10R1.TLabelframe")
21252 frame5 = LabelFrame(digfltwindow, text=
"AWG B Filter", style=
"A10R2.TLabelframe")
21253 frame4.grid(row=2, column=0, sticky=W)
21254 frame5.grid(row=2, column=1, sticky=W)
21256 digfilta = Frame( frame2 )
21257 digfilta.pack(side=LEFT)
21260 lab1 = Checkbutton(digfilta,text=
"Filter CH A", variable=DigFiltA)
21261 lab1.grid(row=0, column=0, columnspan=2, sticky=W)
21262 lab3 = Checkbutton(digfilta,text=
"Box Car", variable=DigFiltABoxCar, command=BuildBoxCarA)
21263 lab3.grid(row=1, column=0, sticky=W)
21264 BCALenEntry = Entry(digfilta, width=3, cursor=
'double_arrow')
21265 BCALenEntry.bind(
"<Return>", onRetDigFiltA)
21266 BCALenEntry.bind(
'<MouseWheel>', onDigFiltAScroll)
21267 BCALenEntry.bind(
"<Button-4>", onDigFiltAScroll)
21268 BCALenEntry.bind(
"<Button-5>", onDigFiltAScroll)
21270 BCALenEntry.grid(row=1, column=1, sticky=W)
21271 BCALenEntry.delete(0,
"end")
21272 BCALenEntry.insert(0,2)
21273 bcalab = Label(digfilta, text=
"Length")
21274 bcalab.grid(row=1, column=2, sticky=W)
21275 DifFiltALength = Label(digfilta, text=
"Length = 0 ")
21276 DifFiltALength.grid(row=2, column=0, sticky=W)
21277 DifFiltAFile = Label(digfilta, text=
"File Name, none ")
21278 DifFiltAFile.grid(row=3, column=0, columnspan=3, sticky=W)
21279 cald = Button(digfilta, text=
'Load CH A Filter Coef', command=BLoadDFiltA)
21280 cald.grid(row=4, column=0, columnspan=3, sticky=W)
21281 camath = Button(digfilta, text=
'CH A Filter formula', command=BDFiltAMath)
21282 camath.grid(row=5, column=0, columnspan=3, sticky=W)
21285 lab5 = Checkbutton(digfilta, text=
"DeSkew A", variable=DigDeSkewA)
21286 lab5.grid(row=6, column=0, sticky=W)
21287 BCASkewEntry = Entry(digfilta, width=3, cursor=
'double_arrow')
21288 BCASkewEntry.bind(
'<MouseWheel>', onTextScroll)
21289 BCASkewEntry.bind(
"<Button-4>", onTextScroll)
21290 BCASkewEntry.bind(
"<Button-5>", onTextScroll)
21291 BCASkewEntry.grid(row=6, column=1, sticky=W)
21292 BCASkewEntry.delete(0,
"end")
21293 BCASkewEntry.insert(0,0)
21294 bcasklab = Label(digfilta, text=
"# Samples")
21295 bcasklab.grid(row=6, column=2, sticky=W)
21300 digfiltb = Frame( frame3 )
21301 digfiltb.pack(side=RIGHT)
21302 lab2 = Checkbutton(digfiltb,text=
"Filter CH B", variable=DigFiltB)
21303 lab2.grid(row=0, column=0, columnspan=2, sticky=W)
21304 lab4 = Checkbutton(digfiltb,text=
"Box Car", variable=DigFiltBBoxCar, command=BuildBoxCarB)
21305 lab4.grid(row=1, column=0, sticky=W)
21306 BCBLenEntry = Entry(digfiltb, width=3, cursor=
'double_arrow')
21307 BCBLenEntry.bind(
"<Return>", onRetDigFiltB)
21308 BCBLenEntry.bind(
'<MouseWheel>', onDigFiltBScroll)
21309 BCBLenEntry.bind(
"<Button-4>", onDigFiltBScroll)
21310 BCBLenEntry.bind(
"<Button-5>", onDigFiltBScroll)
21312 BCBLenEntry.grid(row=1, column=1, sticky=W)
21313 BCBLenEntry.delete(0,
"end")
21314 BCBLenEntry.insert(0,2)
21315 bcblab = Label(digfiltb, text=
"Length")
21316 bcblab.grid(row=1, column=2, sticky=W)
21317 DifFiltBLength = Label(digfiltb,text=
"Length = 0 ")
21318 DifFiltBLength.grid(row=2, column=0, sticky=W)
21319 DifFiltBFile = Label(digfiltb,text=
"File Name, none ")
21320 DifFiltBFile.grid(row=3, column=0, columnspan=3, sticky=W)
21321 cbld = Button(digfiltb, text=
'Load CH B Filter Coef', command=BLoadDFiltB)
21322 cbld.grid(row=4, column=0, columnspan=3, sticky=W)
21323 cbmath = Button(digfiltb, text=
'CH B Filter formula', command=BDFiltBMath)
21324 cbmath.grid(row=5, column=0, columnspan=3, sticky=W)
21326 lab6 = Checkbutton(digfiltb,text=
"DeSkew B", variable=DigDeSkewB)
21327 lab6.grid(row=6, column=0, sticky=W)
21328 BCBSkewEntry = Entry(digfiltb, width=3, cursor=
'double_arrow')
21329 BCBSkewEntry.bind(
'<MouseWheel>', onTextScroll)
21330 BCBSkewEntry.bind(
"<Button-4>", onTextScroll)
21331 BCBSkewEntry.bind(
"<Button-5>", onTextScroll)
21332 BCBSkewEntry.grid(row=6, column=1, sticky=W)
21333 BCBSkewEntry.delete(0,
"end")
21334 BCBSkewEntry.insert(0,0)
21335 bcbsklab = Label(digfiltb, text=
"# Samples")
21336 bcbsklab.grid(row=6, column=2, sticky=W)
21338 awgfilta = Frame( frame4 )
21339 awgfilta.pack(side=LEFT)
21340 lab7 = Checkbutton(awgfilta,text=
"Filter AWG A", variable=AWGFiltA, command=ReMakeAWGwaves)
21341 lab7.grid(row=0, column=0, columnspan=2, sticky=W)
21342 lab8 = Checkbutton(awgfilta,text=
"Box Car", variable=AWGFiltABoxCar, command=BuildAWGBoxCarA)
21343 lab8.grid(row=1, column=0, sticky=W)
21344 AWGALenEntry = Entry(awgfilta, width=3, cursor=
'double_arrow')
21345 AWGALenEntry.bind(
"<Return>", onRetAWGFiltA)
21346 AWGALenEntry.bind(
'<MouseWheel>', onAWGFiltAScroll)
21347 AWGALenEntry.bind(
"<Button-4>", onAWGFiltAScroll)
21348 AWGALenEntry.bind(
"<Button-5>", onAWGFiltAScroll)
21350 AWGALenEntry.grid(row=1, column=1, sticky=W)
21351 AWGALenEntry.delete(0,
"end")
21352 AWGALenEntry.insert(0,2)
21353 awgalab = Label(awgfilta, text=
"Length")
21354 awgalab.grid(row=1, column=2, sticky=W)
21355 AWGFiltALength = Label(awgfilta, text=
"Length = 0 ")
21356 AWGFiltALength.grid(row=2, column=0, sticky=W)
21357 AWGFiltAFile = Label(awgfilta, text=
"File Name, none ")
21358 AWGFiltAFile.grid(row=3, column=0, columnspan=3, sticky=W)
21359 awgaload = Button(awgfilta, text=
'Load AWG A Filter Coef', command=BLoadAWGFiltA)
21360 awgaload.grid(row=4, column=0, columnspan=3, sticky=W)
21361 awgamath = Button(awgfilta, text=
'AWG A Filter formula', command=BAWGFiltAMath)
21362 awgamath.grid(row=5, column=0, columnspan=3, sticky=W)
21365 awgfiltb = Frame( frame5 )
21366 awgfiltb.pack(side=RIGHT)
21367 lab9 = Checkbutton(awgfiltb,text=
"Filter AWG B", variable=AWGFiltB, command=ReMakeAWGwaves)
21368 lab9.grid(row=0, column=0, columnspan=2, sticky=W)
21369 lab10 = Checkbutton(awgfiltb,text=
"Box Car", variable=AWGFiltBBoxCar, command=BuildAWGBoxCarB)
21370 lab10.grid(row=1, column=0, sticky=W)
21371 AWGBLenEntry = Entry(awgfiltb, width=3, cursor=
'double_arrow')
21372 AWGBLenEntry.bind(
"<Return>", onRetAWGFiltB)
21373 AWGBLenEntry.bind(
'<MouseWheel>', onAWGFiltBScroll)
21374 AWGBLenEntry.bind(
"<Button-4>", onAWGFiltBScroll)
21375 AWGBLenEntry.bind(
"<Button-5>", onAWGFiltBScroll)
21377 AWGBLenEntry.grid(row=1, column=1, sticky=W)
21378 AWGBLenEntry.delete(0,
"end")
21379 AWGBLenEntry.insert(0,2)
21380 awgblab = Label(awgfiltb, text=
"Length")
21381 awgblab.grid(row=1, column=2, sticky=W)
21382 AWGFiltBLength = Label(awgfiltb, text=
"Length = 0 ")
21383 AWGFiltBLength.grid(row=2, column=0, sticky=W)
21384 AWGFiltBFile = Label(awgfiltb, text=
"File Name, none ")
21385 AWGFiltBFile.grid(row=3, column=0, columnspan=3, sticky=W)
21386 awgbload = Button(awgfiltb, text=
'Load AWG B Filter Coef', command=BLoadAWGFiltB)
21387 awgbload.grid(row=4, column=0, columnspan=3, sticky=W)
21388 awgbmath = Button(awgfiltb, text=
'AWG B Filter formula', command=BAWGFiltBMath)
21389 awgbmath.grid(row=5, column=0, columnspan=3, sticky=W)
21399 global BCALenEntry, DFiltACoef, DigFiltABoxCar, DifFiltALength
21401 if DigFiltABoxCar.get() == 0:
21404 FLength = int(BCALenEntry.get())
21410 for n
in range(FLength):
21411 DFiltACoef.append(float(1.0/FLength))
21413 DFiltACoef = numpy.array(DFiltACoef)
21414 DifFiltALength.config(text =
"Length = " + str(int(len(DFiltACoef))))
21424 global BCBLenEntry, DFiltBCoef, DigFiltBBoxCar, DifFiltBLength
21426 if DigFiltBBoxCar.get() == 0:
21429 FLength = int(BCBLenEntry.get())
21435 for n
in range(FLength):
21436 DFiltBCoef.append(float(1.0/FLength))
21438 DFiltBCoef = numpy.array(DFiltBCoef)
21439 DifFiltBLength.config(text =
"Length = " + str(int(len(DFiltBCoef))))
21442 global digfltwindow, DigFiltStatus
21444 DigFiltStatus.set(0)
21445 digfltwindow.destroy()
21448 global DFiltACoef, digfltwindow, DifFiltALength, DifFiltAFile
21451 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=digfltwindow)
21453 CSVFile = open(filename)
21454 csv_f = csv.reader(CSVFile)
21456 showwarning(
"WARNING",
"No such file found or wrong format!", parent=digfltwindow)
21462 DFiltACoef.append(float(row[0]))
21464 print(
'skipping non-numeric row')
21465 DFiltACoef = numpy.array(DFiltACoef)
21466 DifFiltALength.config(text =
"Length = " + str(int(len(DFiltACoef))))
21467 DifFiltAFile.config(text =
"File Name, " + os.path.basename(filename))
21471 global DFiltACoef, digfltwindow, DifFiltALength, DifFiltAFile, DigFilterAString
21473 TempString = DigFilterAString
21474 DigFilterAString = askstring(
"CH A Filter Math Formula",
"Current Formula: " + DigFilterAString +
"\n\nNew Formula:\n", initialvalue=DigFilterAString, parent=digfltwindow)
21475 if (DigFilterAString ==
None):
21476 DigFilterAString = TempString
21478 DFiltACoef = eval(DigFilterAString)
21479 DFiltACoef = numpy.array(DFiltACoef)
21480 coefsum = numpy.sum(DFiltACoef)
21481 DFiltACoef = DFiltACoef / coefsum
21482 DifFiltALength.config(text =
"Length = " + str(int(len(DFiltACoef))))
21483 DifFiltAFile.config(text =
"Using Filter A formula" )
21486 global DFiltBCoef, digfltwindow, DifFiltBLength, DifFiltBFile
21489 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=digfltwindow)
21491 CSVFile = open(filename)
21492 csv_f = csv.reader(CSVFile)
21494 showwarning(
"WARNING",
"No such file found or wrong format!", parent=digfltwindow)
21500 DFiltBCoef.append(float(row[0]))
21502 print(
'skipping non-numeric row')
21503 DFiltBCoef = numpy.array(DFiltBCoef)
21504 DifFiltBLength.config(text =
"Length = " + str(int(len(DFiltBCoef))))
21505 DifFiltBFile.config(text =
"File Name, " + os.path.basename(filename))
21509 global DFiltBCoef, digfltwindow, DifFiltBLength, DifFiltBFile, DigFilterBString
21511 TempString = DigFilterBString
21512 DigFilterBString = askstring(
"CH B Filter Math Formula",
"Current Formula: " + DigFilterBString +
"\n\nNew Formula:\n", initialvalue=DigFilterBString, parent=digfltwindow)
21513 if (DigFilterBString ==
None):
21514 DigFilterBString = TempString
21516 DFiltBCoef = eval(DigFilterBString)
21517 DFiltBCoef = numpy.array(DFiltBCoef)
21518 coefsum = numpy.sum(DFiltBCoef)
21519 DFiltBCoef = DFiltBCoef / coefsum
21520 DifFiltBLength.config(text =
"Length = " + str(int(len(DFiltBCoef))))
21521 DifFiltBFile.config(text =
"Using Filter B formula" )
21531 global AWGALenEntry, AWGFiltACoef, AWGFiltABoxCar, AWGFiltALength
21533 if AWGFiltABoxCar.get() == 0:
21536 FLength = int(AWGALenEntry.get())
21542 for n
in range(FLength):
21543 AWGFiltACoef.append(float(1.0/FLength))
21545 AWGFiltACoef = numpy.array(AWGFiltACoef)
21546 AWGFiltALength.config(text =
"Length = " + str(int(len(AWGFiltACoef))))
21557 global AWGBLenEntry, AWGFiltBCoef, AWGFiltBBoxCar, AWGFiltBLength
21559 if AWGFiltBBoxCar.get() == 0:
21562 FLength = int(AWGBLenEntry.get())
21568 for n
in range(FLength):
21569 AWGFiltBCoef.append(float(1.0/FLength))
21571 AWGFiltBCoef = numpy.array(AWGFiltBCoef)
21572 AWGFiltBLength.config(text =
"Length = " + str(int(len(AWGFiltBCoef))))
21576 global AWGFiltACoef, digfltwindow, AWGFiltALength, AWGFiltAFile
21579 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=digfltwindow)
21581 CSVFile = open(filename)
21582 csv_f = csv.reader(CSVFile)
21584 showwarning(
"WARNING",
"No such file found or wrong format!", parent=digfltwindow)
21590 AWGFiltACoef.append(float(row[0]))
21592 print(
'skipping non-numeric row')
21593 AWGFiltACoef = numpy.array(AWGFiltACoef)
21594 AWGFiltALength.config(text =
"Length = " + str(int(len(AWGFiltACoef))))
21595 AWGFiltAFile.config(text =
"File Name, " + os.path.basename(filename))
21600 global AWGFiltACoef, digfltwindow, AWGFiltALength, AWGFiltAFile, AWGFilterAString
21602 TempString = AWGFilterAString
21603 AWGFilterAString = askstring(
"AWG A Filter Math Formula",
"Current Formula: " + DigFilterAString +
"\n\nNew Formula:\n", initialvalue=AWGFilterAString, parent=digfltwindow)
21604 if (AWGFilterAString ==
None):
21605 AWGFilterAString = TempString
21607 AWGFiltACoef = eval(AWGFilterAString)
21608 AWGFiltACoef = numpy.array(AWGFiltACoef)
21609 coefsum = numpy.sum(AWGFiltACoef)
21610 AWGFiltACoef = AWGFiltACoef / coefsum
21611 AWGFiltALength.config(text =
"Length = " + str(int(len(AWGFiltACoef))))
21612 AWGFiltAFile.config(text =
"AWG A Filter formula" )
21617 global AWGFiltBCoef, digfltwindow, AWGFiltbLength, AWGFiltBFile
21620 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=digfltwindow)
21622 CSVFile = open(filename)
21623 csv_f = csv.reader(CSVFile)
21625 showwarning(
"WARNING",
"No such file found or wrong format!", parent=digfltwindow)
21631 AWGFiltBCoef.append(float(row[0]))
21633 print(
'skipping non-numeric row')
21634 AWGFiltBCoef = numpy.array(AWGFiltBCoef)
21635 AWGFiltBLength.config(text =
"Length = " + str(int(len(AWGFiltBCoef))))
21636 AWGFiltBFile.config(text =
"File Name, " + os.path.basename(filename))
21641 global AWGFiltBCoef, digfltwindow, AWGFiltBLength, AWGFiltBFile, AWGFilterBString
21643 TempString = AWGFilterBString
21644 AWGFilterBString = askstring(
"AWG B Filter Math Formula",
"Current Formula: " + DigFilterBString +
"\n\nNew Formula:\n", initialvalue=AWGFilterBString, parent=digfltwindow)
21645 if (AWGFilterBString ==
None):
21646 AWGFilterBString = TempString
21648 AWGFiltBCoef = eval(AWGFilterBString)
21649 AWGFiltBCoef = numpy.array(AWGFiltBCoef)
21650 coefsum = numpy.sum(AWGFiltBCoef)
21651 AWGFiltBCoef = AWGFiltBCoef / coefsum
21652 AWGFiltBLength.config(text =
"Length = " + str(int(len(AWGFiltBCoef))))
21653 AWGFiltBFile.config(text =
"AWG B Filter formula" )
21661 osr = int(Fsample/Freject)
21664 sinc1 = numpy.ones(osr)
21667 sinc2 = numpy.convolve(sinc1, sinc1)
21668 sinc3 = numpy.convolve(sinc2, sinc1)
21669 sinc4 = numpy.convolve(sinc2, sinc2)
21670 fosr = float(Fsample/Freject)
21694 for (x,y)
in zip(xs, ys):
21695 S_x2_y += x * x * y
21696 S_y_lny += y * numpy.log(y)
21698 S_x_y_lny += x * y * numpy.log(y)
21701 a = (S_x2_y * S_y_lny - S_x_y * S_x_y_lny) / (S_y * S_x2_y - S_x_y * S_x_y)
21702 b = (S_y * S_x_y_lny - S_x_y * S_y_lny) / (S_y * S_x2_y - S_x_y * S_x_y)
21703 return (numpy.exp(a), b)
21706 global commandwindow, CommandStatus, ExecString, LastCommand, RevDate, SWRev
21708 if CommandStatus.get() == 0:
21709 CommandStatus.set(1)
21710 commandwindow = Toplevel()
21711 commandwindow.title(
"Command Line " + SWRev + RevDate)
21712 commandwindow.resizable(FALSE,FALSE)
21713 commandwindow.protocol(
"WM_DELETE_WINDOW", DestroyCommandScreen)
21714 toplab = Label(commandwindow,text=
"Command Line Interface ", style=
"A12B.TLabel")
21715 toplab.grid(row=0, column=0, columnspan=4, sticky=W)
21716 cl1 = Label(commandwindow,text=
"Last command:")
21717 cl1.grid(row=1, column=0, sticky=W)
21718 LastCommand = Label(commandwindow,text=
" ")
21719 LastCommand.grid(row=2, column=0, columnspan=4, sticky=W)
21720 ExecString = Entry(commandwindow, width=40)
21721 ExecString.bind(
"<Return>", RExecuteFromString)
21722 ExecString.grid(row=3, column=0, columnspan=4, sticky=W)
21723 ExecString.delete(0,
"end")
21724 ExecString.insert(0,
"")
21725 executeclbutton = Button(commandwindow, text=
"Execute", style=
"W8.TButton", command=BExecuteFromString)
21726 executeclbutton.grid(row=4, column=0, sticky=W, pady=8)
21727 scriptbutton = Button(commandwindow, text=
"Run Script", style=
"W10.TButton", command=RunScript)
21728 scriptbutton.grid(row=4, column=1, sticky=W, pady=8)
21730 dismissclbutton = Button(commandwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyCommandScreen)
21731 dismissclbutton.grid(row=4, column=2, sticky=W, pady=7)
21734 global commandwindow, CommandStatus
21736 CommandStatus.set(0)
21737 commandwindow.destroy()
21744 global ExecString, LastCommand
21745 global VBuffA, VBuffB, IBuffA, IBuffB, VFilterA, VFilterB
21746 global VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGAwaveform, AWGBwaveform
21747 global TgInput, TgEdge, SingleShot, AutoLevel, SingleShotSA, ManualTrigger
21748 global root, freqwindow, awgwindow, iawindow, xywindow, win1, win2
21749 global TRIGGERentry, TMsb, Xsignal, Ysignal, AutoCenterA, AutoCenterB
21750 global CHAsb, CHAIsb, CHBsb, CHBIsb, HScale, FreqTraceMode
21751 global CHAsbxy, CHAIsbxy, CHBsbxy, CHBIsbxy, HoldOffentry
21752 global CHAVPosEntryxy, CHBVPosEntryxy, CHAIPosEntryxy, CHBIPosEntryxy
21753 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, MathTrace, MathXUnits, MathYUnits
21754 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry, HozPossentry
21755 global AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry, AWGADutyCycleEntry
21756 global AWGAPhaseEntry, AWGAShape, AWGATerm, AWGAMode, AWGARepeatFlag, AWGBRepeatFlag
21757 global AWGBAmplEntry, AWGBOffsetEntry, AWGBFreqEntry, AWGBDutyCycleEntry
21758 global AWGBPhaseEntry, AWGBShape, AWGBTerm, AWGBMode, AWGSync, AWGAIOMode, AWGBIOMode
21759 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
21760 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1, MeasDCI1, MeasMinI1
21761 global MeasMaxI1, MeasMidI1, MeasPPI1, MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2
21762 global MeasPPV2, MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2, MeasDiffAB, MeasDiffBA
21763 global MeasRMSV1, MeasRMSV2, MeasRMSI1, MeasRMSI2, MeasPhase, MeasDelay
21764 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ, IASource, DisplaySeries
21765 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
21766 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
21767 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, CutDC, AWG_Amp_Mode
21768 global FFTwindow, DBdivindex, DBlevel, TRACEmodeTime, TRACEaverage, Vdiv
21769 global SMPfftpwrTwo, SMPfft, StartFreqEntry, StopFreqEntry, ZEROstuffing
21770 global TimeDisp, XYDisp, FreqDisp, IADisp, AWGAPhaseDelay, AWGBPhaseDelay
21771 global RsystemEntry, ResScale, GainCorEntry, PhaseCorEntry
21772 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2
21773 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxScreenStatus, MuxEnb
21774 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry, muxwindow, ChopMuxMode, ChopTrig, DualMuxMode
21775 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
21776 global MathString, MathXString, MathYString, UserAString, UserALabel, UserBString, UserBLabel
21777 global MathAxis, MathXAxis, MathYAxis, Show_MathX, Show_MathY, MathScreenStatus, MathWindow
21778 global AWGAMathString, AWGBMathString, FFTUserWindowString, DigFilterAString, DigFilterBString
21779 global GRWF, GRHF, GRWBP, GRHBP, GRWXY, GRHXY, GRWIA, GRHIA, MeasureStatus
21780 global ChaLableSrring1, ChaLableSrring2, ChaLableSrring3, ChaLableSrring4, ChaLableSrring5, ChaLableSrring6
21781 global ChbLableSrring1, ChbLableSrring2, ChbLableSrring3, ChbLableSrring4, ChbLableSrring5, ChbLableSrring6
21782 global ChaMeasString1, ChaMeasString2, ChaMeasString3, ChaMeasString4, ChaMeasString5, ChaMeasString6
21783 global ChbMeasString1, ChbMeasString2, ChbMeasString3, ChbMeasString4, ChbMeasString5, ChbMeasString6
21784 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2, CHAI_RC_HP, CHBI_RC_HP
21785 global CHA_A1, CHA_A2, CHB_A1, CHB_A2, RelPhaseCenter, ImpedanceCenter
21786 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
21787 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
21788 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle
21789 global AWGABurstFlag, AWGACycles, AWGABurstDelay, AWGAwaveform, AWGAcsvFile, AWGBcsvFile
21790 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay, AWGBwaveform, AWGAwavFile, AWGBwavFile
21791 global SCLKPort, SDATAPort, SLATCHPort, EnableHSsampling, FminEntry, HtMulEntry
21792 global phawindow, PhAca, PhAScreenStatus, PhADisp
21793 global GRWPhA, X0LPhA, GRHPhA, Y0TPhA, EnableScopeOnly
21794 global VScale, IScale, RefphEntry, SMPfft, BoardStatus, boardwindow, BrdSel
21795 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn, RollBt, Roll_Mode
21796 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D, ScreenWidth, ScreenHeight
21797 global TRACEwidth, ColorMode, ca, COLORcanvas, COLORtrace4, COLORtraceR4, COLORtext
21798 global AWGANoiseEntry, AWGBNoiseEntry, AWGAsbnoise, AWGBsbnoise
21799 global AWGFiltA, AWGALenEntry, AWGFiltABoxCar, AWGFiltALength, digfltwindow
21800 global AWGFiltB, AWGBLenEntry, AWGFiltBBoxCar, AWGFiltBLength
21801 global DFiltACoef, DFiltBCoef, AWGACoef, AWGBCoef
21804 exec( ExecString.get(), globals(), globals())
21806 LastCommand.config(text = ExecString.get() )
21808 LastCommand.config(text =
"Syntax Error Encountered" )
21812 global ca, GRW, XOL, GRH, Y0T, CANVASwidth, CANVASheight, FontSize
21815 CANVASwidth = event.width - 4
21816 CANVASheight = event.height - 4
21817 GRW = CANVASwidth - (2 * X0L)
21818 GRH = CANVASheight - (Y0T + (FontSize * 7))
21822 global ChaLab1, ChaLab12, ChaLab3, ChaLab4, ChaLab5, ChaLab6
21823 global ChaValue1, ChaValue2, ChaValue3, ChaValue4, ChaValue5, ChaValue6
21824 global ChbLab1, ChbLab12, ChbLab3, ChbLab4, ChbLab5, ChbLab6
21825 global ChbValue1, ChbValue2, ChbValue3, ChbValue4, ChbValue5, ChbValue6
21826 global ChaMeasString1, ChaMeasString2, ChaMeasString3, ChaMeasString4, ChaMeasString5, ChaMeasString6
21827 global ChbMeasString1, ChbMeasString2, ChbMeasString3, ChbMeasString4, ChbMeasString5, ChbMeasString6
21829 ValueText =
' {0:.4f} '.format(eval(ChaMeasString1))
21830 ChaValue1.config(text = ValueText)
21831 ValueText =
' {0:.4f} '.format(eval(ChaMeasString2))
21832 ChaValue2.config(text = ValueText)
21833 ValueText =
' {0:.4f} '.format(eval(ChaMeasString3))
21834 ChaValue3.config(text = ValueText)
21835 ValueText =
' {0:.4f} '.format(eval(ChaMeasString4))
21836 ChaValue4.config(text = ValueText)
21837 ValueText =
' {0:.4f} '.format(eval(ChaMeasString5))
21838 ChaValue5.config(text = ValueText)
21839 ValueText =
' {0:.4f} '.format(eval(ChaMeasString6))
21840 ChaValue6.config(text = ValueText)
21841 ValueText =
' {0:.4f} '.format(eval(ChbMeasString1))
21842 ChbValue1.config(text = ValueText)
21843 ValueText =
' {0:.4f} '.format(eval(ChbMeasString2))
21844 ChbValue2.config(text = ValueText)
21845 ValueText =
' {0:.4f} '.format(eval(ChbMeasString3))
21846 ChbValue3.config(text = ValueText)
21847 ValueText =
' {0:.4f} '.format(eval(ChbMeasString4))
21848 ChbValue4.config(text = ValueText)
21849 ValueText =
' {0:.4f} '.format(eval(ChbMeasString5))
21850 ChbValue5.config(text = ValueText)
21851 ValueText =
' {0:.4f} '.format(eval(ChbMeasString6))
21852 ChbValue6.config(text = ValueText)
21855 global measurewindow, MeasureStatus, RevDate, SWRev
21856 global ChaLab1, ChaLab12, ChaLab3, ChaLab4, ChaLab5, ChaLab6
21857 global ChaValue1, ChaValue2, ChaValue3, ChaValue4, ChaValue5, ChaValue6
21858 global ChbLab1, ChbLab12, ChbLab3, ChbLab4, ChbLab5, ChbLab6
21859 global ChbValue1, ChbValue2, ChbValue3, ChbValue4, ChbValue5, ChbValue6
21860 global ChaLableSrring1, ChaLableSrring2, ChaLableSrring3, ChaLableSrring4, ChaLableSrring5, ChaLableSrring6
21861 global ChbLableSrring1, ChbLableSrring2, ChbLableSrring3, ChbLableSrring4, ChbLableSrring5, ChbLableSrring6
21863 if MeasureStatus.get() == 0:
21864 MeasureStatus.set(1)
21865 measurewindow = Toplevel()
21866 measurewindow.title(
"Measurements " + SWRev + RevDate)
21867 measurewindow.resizable(FALSE,FALSE)
21868 measurewindow.protocol(
"WM_DELETE_WINDOW", DestroyMeasureScreen)
21869 toplab = Label(measurewindow,text=
"Measurements ", style=
"A12B.TLabel")
21870 toplab.grid(row=0, column=0, columnspan=2, sticky=W)
21871 ChaLab1 = Label(measurewindow,text=ChaLableSrring1, style=
"A10B.TLabel")
21872 ChaLab1.grid(row=1, column=0, columnspan=1, sticky=W)
21873 ChaValue1 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21874 ChaValue1.grid(row=1, column=1, columnspan=1, sticky=W)
21875 ChaLab2 = Label(measurewindow,text=ChaLableSrring2, style=
"A10B.TLabel")
21876 ChaLab2.grid(row=1, column=2, columnspan=1, sticky=W)
21877 ChaValue2 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21878 ChaValue2.grid(row=1, column=3, columnspan=1, sticky=W)
21879 ChaLab3 = Label(measurewindow,text=ChaLableSrring3, style=
"A10B.TLabel")
21880 ChaLab3.grid(row=2, column=0, columnspan=1, sticky=W)
21881 ChaValue3 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21882 ChaValue3.grid(row=2, column=1, columnspan=1, sticky=W)
21883 ChaLab4 = Label(measurewindow,text=ChaLableSrring4, style=
"A10B.TLabel")
21884 ChaLab4.grid(row=2, column=2, columnspan=1, sticky=W)
21885 ChaValue4 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21886 ChaValue4.grid(row=2, column=3, columnspan=1, sticky=W)
21887 ChaLab5 = Label(measurewindow,text=ChaLableSrring5, style=
"A10B.TLabel")
21888 ChaLab5.grid(row=3, column=0, columnspan=1, sticky=W)
21889 ChaValue5 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21890 ChaValue5.grid(row=3, column=1, columnspan=1, sticky=W)
21891 ChaLab6 = Label(measurewindow,text=ChaLableSrring6, style=
"A10B.TLabel")
21892 ChaLab6.grid(row=3, column=2, columnspan=1, sticky=W)
21893 ChaValue6 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21894 ChaValue6.grid(row=3, column=3, columnspan=1, sticky=W)
21896 ChbLab1 = Label(measurewindow,text=ChbLableSrring1, style=
"A10B.TLabel")
21897 ChbLab1.grid(row=4, column=0, columnspan=1, sticky=W)
21898 ChbValue1 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21899 ChbValue1.grid(row=4, column=1, columnspan=1, sticky=W)
21900 ChbLab2 = Label(measurewindow,text=ChbLableSrring2, style=
"A10B.TLabel")
21901 ChbLab2.grid(row=4, column=2, columnspan=1, sticky=W)
21902 ChbValue2 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21903 ChbValue2.grid(row=4, column=3, columnspan=1, sticky=W)
21904 ChbLab3 = Label(measurewindow,text=ChbLableSrring3, style=
"A10B.TLabel")
21905 ChbLab3.grid(row=5, column=0, columnspan=1, sticky=W)
21906 ChbValue3 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21907 ChbValue3.grid(row=5, column=1, columnspan=1, sticky=W)
21908 ChbLab4 = Label(measurewindow,text=ChbLableSrring4, style=
"A10B.TLabel")
21909 ChbLab4.grid(row=5, column=2, columnspan=1, sticky=W)
21910 ChbValue4 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21911 ChbValue4.grid(row=5, column=3, columnspan=1, sticky=W)
21912 ChbLab5 = Label(measurewindow,text=ChbLableSrring5, style=
"A10B.TLabel")
21913 ChbLab5.grid(row=6, column=0, columnspan=1, sticky=W)
21914 ChbValue5 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21915 ChbValue5.grid(row=6, column=1, columnspan=1, sticky=W)
21916 ChbLab6 = Label(measurewindow,text=ChbLableSrring6, style=
"A10B.TLabel")
21917 ChbLab6.grid(row=6, column=2, columnspan=1, sticky=W)
21918 ChbValue6 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21919 ChbValue6.grid(row=6, column=3, columnspan=1, sticky=W)
21922 global measurewindow, MeasureStatus
21924 MeasureStatus.set(0)
21925 measurewindow.destroy()
21928 global boardwindow, BoardStatus, session, devx, dev0, dev1, dev2, MultipleBoards
21929 global RevDate, BrdSel, FWRevOne, HWRevOne, FWRevTwo, HWRevTwo, WRevThree, HWRevThree
21931 if len(session.devices) > 1
and MultipleBoards.get() > 0:
21932 if BoardStatus.get() == 0:
21934 boardwindow = Toplevel()
21935 boardwindow.title(
"Select Board " + RevDate)
21936 boardwindow.resizable(FALSE,FALSE)
21937 boardwindow.protocol(
"WM_DELETE_WINDOW", DestroyBoardScreen)
21938 toplab = Label(boardwindow,text=
"- Select ALM1000 -", style=
"A12B.TLabel")
21939 toplab.pack(side=TOP)
21940 for idx, devx
in enumerate(session.devices):
21941 BrdText =
"Board # " + str(idx)
21943 devx.set_led(0b010)
21944 FWRevOne = float(devx.fwver)
21945 HWRevOne = devx.hwver
21947 brd = Radiobutton(boardwindow, text=BrdText, style=
"Run.TRadiobutton", variable=BrdSel, value=idx, command=SelectBoard)
21949 devx.set_led(0b100)
21950 FWRevTwo = float(devx.fwver)
21951 HWRevTwo = devx.hwver
21953 brd = Radiobutton(boardwindow, text=BrdText, style=
"Stop.TRadiobutton", variable=BrdSel, value=idx, command=SelectBoard)
21955 devx.set_led(0b001)
21956 FWRevThree = float(devx.fwver)
21957 HWRevThree = devx.hwver
21959 brd = Radiobutton(boardwindow, text=BrdText, variable=BrdSel, value=idx, command=SelectBoard)
21961 dev3 = session.devices[3]
21962 brd = Radiobutton(boardwindow, text=BrdText, variable=BrdSel, value=idx, command=SelectBoard)
21965 devx = session.devices[0]
21967 devx.set_led(0b010)
21969 FWRevOne = float(devx.fwver)
21970 HWRevOne = devx.hwver
21972 FWRevOne =
"Before 2.06"
21974 dev0 = session.devices[0]
21977 global boardwindow, BoardStatus
21980 boardwindow.destroy()
21983 global devx, dev0, dev1, dev2, session, BrdSel, CHA, CHB, DevID, MaxSamples, AWGSAMPLErate
21984 global bcon, FWRevOne, HWRevOne, FWRevTwo, HWRevTwo, WRevThree, HWRevThree, SAMPLErate, MultipleBoards
21986 if DevID ==
"No Device" or DevID ==
"m1k":
21988 session = Session(ignore_dataflow=
True, sample_rate=SAMPLErate, queue_size=MaxSamples)
21991 if not session.devices:
21992 print(
'No Device plugged IN!')
21993 DevID =
"No Device"
21996 bcon.configure(text=
"Recon", style=
"RConn.TButton")
21998 session.configure(sample_rate=SAMPLErate)
22002 bcon.configure(text=
"Conn", style=
"GConn.TButton")
22003 devx.set_adc_mux(0)
22004 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
22005 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
22013 global devx, dev0, dev1, dev2, session, BrdSel, CHA, CHB, DevID, RUNstatus, FWRevOne, HWRevOne
22014 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7, cal, SAMPLErate, MaxSamples
22015 global IgnoreFirmwareCheck, SDATAPort, SCLKPort, SLATCHPort
22017 if RUNstatus.get() == 1:
22021 if BrdSel.get() == 0:
22023 session.remove(dev1)
22024 print(
"Removing dev1")
22026 print(
"Skipping dev1")
22028 session.remove(dev2)
22029 print(
"Removing dev2")
22031 print(
"Skipping dev2")
22035 if BrdSel.get() == 1:
22037 session.remove(dev0)
22038 print(
"Removing dev0")
22040 print(
"Skipping dev0")
22042 session.remove(dev2)
22043 print(
"Removing dev2")
22045 print(
"Skipping dev2")
22049 DevID = devx.serial
22051 FWRevOne = float(devx.fwver)
22052 HWRevOne = str(devx.hwver)
22053 print( FWRevOne, HWRevOne)
22056 if IgnoreFirmwareCheck == 0:
22057 if FWRevOne < 2.17:
22058 showwarning(
"WARNING",
"This ALICE version Requires Firmware version > 2.16")
22060 cal = devx.calibration
22061 CHA = devx.channels[
'A']
22062 CHA.mode = Mode.HI_Z_SPLIT
22063 CHB = devx.channels[
'B']
22064 CHB.mode = Mode.HI_Z_SPLIT
22077 devx.set_adc_mux(0)
22078 if devx.hwver ==
"F":
22079 print(
"Rev F Board I/O ports set")
22098 SDATAPort.set(PIO_1)
22099 SCLKPort.set(PIO_2)
22100 SLATCHPort.set(PIO_0)
22103 global SAMPLErate, AWGSAMPLErate, BaseSampleRate, session, ETSStatus, etssrlab, RevDate
22104 global Two_X_Sample, ADC_Mux_Mode, SampleRatewindow, SampleRateStatus, BaseRatesb
22105 global Alternate_Sweep_Mode, DeBugMode, FWRevOne, SWRev, SampRateList
22106 global FrameRefief, BorderSize
22108 if SampleRateStatus.get() == 0:
22109 SampleRateStatus.set(1)
22110 SampleRatewindow = Toplevel()
22111 SampleRatewindow.title(
"Set Sample Rate " + SWRev + RevDate)
22112 SampleRatewindow.resizable(FALSE,FALSE)
22113 SampleRatewindow.protocol(
"WM_DELETE_WINDOW", DestroySampleRate)
22114 frame1 = Frame(SampleRatewindow, borderwidth=BorderSize, relief=FrameRefief)
22115 frame1.grid(row=0, column=0, sticky=W)
22117 BaseRATE = Frame( frame1 )
22118 BaseRATE.grid(row=0, column=0, sticky=W)
22119 baseratelab = Label(BaseRATE, text=
"Base Sample Rate", style=
"A10B.TLabel")
22120 baseratelab.pack(side=LEFT)
22121 BaseRatesb = Spinbox(BaseRATE, width=6, values=SampRateList, command=SetSampleRate)
22122 BaseRatesb.bind(
'<MouseWheel>', onSrateScroll)
22123 BaseRatesb.bind(
"<Button-4>", onSrateScroll)
22124 BaseRatesb.bind(
"<Button-5>", onSrateScroll)
22125 BaseRatesb.bind(
"<Return>", onRetSrate)
22126 BaseRatesb.pack(side=LEFT)
22127 BaseRatesb.delete(0,
"end")
22128 BaseRatesb.insert(0,BaseSampleRate)
22131 if FWRevOne > 2.16:
22132 twoX = Checkbutton(frame1, text=
"Double Sample Rate", variable=Two_X_Sample, command=SetADC_Mux )
22133 twoX.grid(row=1, column=0, sticky=W)
22134 muxlab1 = Label(frame1, text=
"ADC MUX Modes", style=
"A10B.TLabel")
22135 muxlab1.grid(row=2, column=0, sticky=W)
22136 AltSweep = Checkbutton(frame1, text=
"Alternate Sweep Mode", variable=Alternate_Sweep_Mode )
22137 AltSweep.grid(row=3, column=0, sticky=W)
22138 chabuttons = Frame( frame1 )
22139 chabuttons.grid(row=4, column=0, sticky=W)
22140 muxrb1 = Radiobutton(chabuttons, text=
"VA and VB", variable=ADC_Mux_Mode, value=0, command=SetADC_Mux )
22141 muxrb1.pack(side=LEFT)
22142 muxrb2 = Radiobutton(chabuttons, text=
"IA and IB", variable=ADC_Mux_Mode, value=1, command=SetADC_Mux )
22143 muxrb2.pack(side=LEFT)
22144 chcbuttons = Frame( frame1 )
22145 chcbuttons.grid(row=5, column=0, sticky=W)
22146 muxrb5 = Radiobutton(chcbuttons, text=
"VA and IA", variable=ADC_Mux_Mode, value=4, command=SetADC_Mux )
22147 muxrb5.pack(side=LEFT)
22148 muxrb6 = Radiobutton(chcbuttons, text=
"VB and IB", variable=ADC_Mux_Mode, value=5, command=SetADC_Mux )
22149 muxrb6.pack(side=LEFT)
22152 chbbuttons = Frame( frame1 )
22153 chbbuttons.grid(row=nextrow, column=0, sticky=W)
22154 muxrb3 = Radiobutton(chbbuttons, text=
"VA and IB", variable=ADC_Mux_Mode, value=2, command=SetADC_Mux )
22155 muxrb3.pack(side=LEFT)
22156 muxrb4 = Radiobutton(chbbuttons, text=
"VB and IA", variable=ADC_Mux_Mode, value=3, command=SetADC_Mux )
22157 muxrb4.pack(side=LEFT)
22158 nextrow = nextrow + 1
22160 sratedismissclbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroySampleRate)
22161 sratedismissclbutton.grid(row=nextrow, column=0, sticky=W, pady=7)
22164 global SampleRatewindow, SampleRateStatus
22166 SampleRateStatus.set(0)
22167 SampleRatewindow.destroy()
22181 global SAMPLErate, BaseSampleRate, AWGSAMPLErate, session, ETSStatus, etssrlab, BaseRatesb
22182 global Two_X_Sample, ADC_Mux_Mode, rtsrlab, RUNstatus
22186 if (RUNstatus.get() == 1):
22190 NewRate = int(BaseRatesb.get())
22191 if NewRate <= 100000:
22192 BaseSampleRate = NewRate
22194 BaseSampleRate = 100000
22195 BaseRatesb.delete(0,
"end")
22196 BaseRatesb.insert(0,BaseSampleRate)
22197 SAMPLErate = BaseSampleRate
22200 session.configure(sample_rate=BaseSampleRate)
22201 BaseSampleRate = session.sample_rate
22203 SAMPLErate = BaseSampleRate
22205 AWGSAMPLErate = BaseSampleRate
22206 if ETSStatus.get() > 0:
22207 SRstring =
"RT Sample Rate = " + str(BaseSampleRate)
22208 rtsrlab.config(text=SRstring)
22210 BaseRatesb.delete(0,
"end")
22211 BaseRatesb.insert(0,BaseSampleRate)
22213 if (WasRunning == 1):
22218 global StopFreqEntry, Two_X_Sample, ADC_Mux_Mode, FWRevOne
22222 StopFrequency = float(StopFreqEntry.get())
22224 StopFreqEntry.delete(0,
"end")
22225 StopFreqEntry.insert(0,50000)
22226 StopFrequency = 50000
22227 if FWRevOne > 2.16:
22228 if StopFrequency >= 50000:
22229 Two_X_Sample.set(1)
22230 ADC_Mux_Mode.set(0)
22233 Two_X_Sample.set(0)
22234 ADC_Mux_Mode.set(0)
22238 global StopBodeEntry, Two_X_Sample, ADC_Mux_Mode, FWRevOne
22242 StopFrequency = float(StopBodeEntry.get())
22244 StopBodeEntry.delete(0,
"end")
22245 StopBodeEntry.insert(0,20000)
22246 StopFrequency = 20000
22247 if FWRevOne > 2.16:
22248 if StopFrequency >= 20000:
22249 Two_X_Sample.set(1)
22250 ADC_Mux_Mode.set(0)
22253 Two_X_Sample.set(0)
22254 ADC_Mux_Mode.set(0)
22258 global devx, SAMPLErate, BaseSampleRate, Two_X_Sample, ADC_Mux_Mode, CHA, CHB
22259 global v1_adc_conf, i1_adc_conf, v2_adc_conf, i2_adc_conf
22260 global AWGSync, discontloop, session, ADsignal1
22262 if Two_X_Sample.get() == 1:
22263 if ADC_Mux_Mode.get() == 0:
22264 devx.set_adc_mux(1)
22265 elif ADC_Mux_Mode.get() == 1:
22266 devx.set_adc_mux(2)
22267 elif ADC_Mux_Mode.get() == 2:
22269 devx.set_adc_mux(2)
22271 devx.set_adc_mux(7)
22272 devx.ctrl_transfer(0x40, 0x20, v1_adc_conf, 0, 0, 0, 100)
22273 devx.ctrl_transfer(0x40, 0x21, i1_adc_conf, 0, 0, 0, 100)
22274 devx.ctrl_transfer(0x40, 0x22, v2_adc_conf, 0, 0, 0, 100)
22275 devx.ctrl_transfer(0x40, 0x22, i2_adc_conf, 0, 0, 0, 100)
22277 elif ADC_Mux_Mode.get() == 3:
22280 devx.set_adc_mux(7)
22281 devx.ctrl_transfer(0x40, 0x20, v1_adc_conf, 0, 0, 0, 100)
22282 devx.ctrl_transfer(0x40, 0x21, i1_adc_conf, 0, 0, 0, 100)
22283 devx.ctrl_transfer(0x40, 0x22, v2_adc_conf, 0, 0, 0, 100)
22284 devx.ctrl_transfer(0x40, 0x22, i2_adc_conf, 0, 0, 0, 100)
22286 elif ADC_Mux_Mode.get() == 4:
22288 devx.set_adc_mux(2)
22289 if AWGSync.get() > 0:
22290 if discontloop > 0:
22296 ADsignal1 = devx.get_samples(1000)
22299 if session.continuous:
22300 ADsignal1 = devx.read(1000, -1,
True)
22302 devx.set_adc_mux(4)
22303 elif ADC_Mux_Mode.get() == 5:
22305 devx.set_adc_mux(2)
22306 if AWGSync.get() > 0:
22307 if discontloop > 0:
22313 ADsignal1 = devx.get_samples(1000)
22316 if session.continuous:
22317 ADsignal1 = devx.read(1000, -1,
True)
22319 devx.set_adc_mux(5)
22320 SAMPLErate = BaseSampleRate * 2
22322 devx.set_adc_mux(0)
22323 SAMPLErate = BaseSampleRate
22326 global ADC_Mux_Mode, Alternate_Sweep_Mode, ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
22328 if ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
22329 ADC_Mux_Mode.set(0)
22330 Alternate_Sweep_Mode.set(1)
22331 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 1
and ShowC2_I.get() == 0:
22332 ADC_Mux_Mode.set(0)
22333 Alternate_Sweep_Mode.set(1)
22334 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 1:
22335 ADC_Mux_Mode.set(0)
22336 Alternate_Sweep_Mode.set(1)
22337 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 1
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
22338 ADC_Mux_Mode.set(0)
22339 Alternate_Sweep_Mode.set(1)
22340 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 0
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
22341 ADC_Mux_Mode.set(0)
22342 Alternate_Sweep_Mode.set(1)
22344 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 1:
22345 ADC_Mux_Mode.set(1)
22346 Alternate_Sweep_Mode.set(0)
22347 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 0:
22348 ADC_Mux_Mode.set(1)
22349 Alternate_Sweep_Mode.set(0)
22350 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 0
and ShowC2_V.get() == 0
and ShowC2_I.get() == 1:
22351 ADC_Mux_Mode.set(1)
22352 Alternate_Sweep_Mode.set(0)
22353 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 0:
22354 ADC_Mux_Mode.set(4)
22355 Alternate_Sweep_Mode.set(0)
22356 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 0
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
22357 ADC_Mux_Mode.set(5)
22358 Alternate_Sweep_Mode.set(0)
22360 ADC_Mux_Mode.set(0)
22361 Alternate_Sweep_Mode.set(0)
22366 global devx, dev0, dev1, dev2, session, BrdSel, CHA, CHB, DevID, MaxSamples
22367 global bcon, FWRevOne, HWRevOne, FWRevTwo, HWRevTwo, WRevThree, HWRevThree
22370 if askyesno(
"Update current firmware",
"Flash new firmware to current device:\n(Yes) or (No)?"):
22371 filename = askopenfilename(defaultextension =
".bin", filetypes=[(
"Binary",
"*.bin")])
22376 print(
"Cancel current session.")
22378 print( session.cancelled)
22380 print(
"Waiting 5...")
22382 print(
"Put board in Samba mode and flash firmware.")
22383 session.flash_firmware(filename)
22385 showwarning(
"Complete",
"Flash Firmware Complete: \n Un-plug board to cycle power.")
22394 showwarning(
"Complete",
"Flash Firmware Complete: \n Un-plug board to cycle power.")
22395 showwarning(
"Exit ALICE",
"Must Exit Program: \n Restart ALICE to continue.")
22407 global OhmDisp, OhmStatus, ohmwindow, RevDate, RMode, OhmA0, OhmA1, OhmRunStatus
22408 global CHATestVEntry, CHATestREntry, SWRev, AWGSync, OnBoardRes
22409 global FrameRefief, BorderSize
22411 if OhmStatus.get() == 0:
22416 ohmwindow = Toplevel()
22417 ohmwindow.title(
"DC Ohmmeter " + SWRev + RevDate)
22418 ohmwindow.resizable(FALSE,FALSE)
22419 ohmwindow.protocol(
"WM_DELETE_WINDOW", DestroyOhmScreen)
22420 frame1 = Frame(ohmwindow, borderwidth=BorderSize, relief=FrameRefief)
22421 frame1.grid(row=0, column=0, sticky=W)
22423 buttons = Frame( frame1 )
22424 buttons.grid(row=0, column=0, sticky=W)
22425 omrb2 = Radiobutton(buttons, text=
"Run", style=
"Run.TRadiobutton", variable=OhmRunStatus, value=1, command=BStartOhm )
22426 omrb2.pack(side=LEFT)
22427 omrb1 = Radiobutton(buttons, text=
"Stop", style=
"Stop.TRadiobutton", variable=OhmRunStatus, value=0, command=BStop )
22428 omrb1.pack(side=LEFT)
22430 OhmA0 = Label(frame1, style=
"A16B.TLabel")
22431 OhmA0.grid(row=1, column=0, columnspan=2, sticky=W)
22432 OhmA0.config(text =
"0.000 Ohms")
22434 OhmA1 = Label(frame1, style=
"A12B.TLabel")
22435 OhmA1.grid(row=2, column=0, columnspan=2, sticky=W)
22436 OhmA1.config(text =
"Meas 0.00 mA 0.00 V")
22438 TestVA = Frame( frame1 )
22439 TestVA.grid(row=3, column=0, sticky=W)
22440 chatestvlab = Label(TestVA, text=
"Test Voltage", style=
"A10B.TLabel")
22441 chatestvlab.pack(side=LEFT)
22442 CHATestVEntry = Entry(TestVA, width=6, cursor=
'double_arrow')
22443 CHATestVEntry.pack(side=LEFT)
22444 CHATestVEntry.bind(
'<MouseWheel>', onTextScroll)
22445 CHATestVEntry.bind(
"<Button-4>", onTextScroll)
22446 CHATestVEntry.bind(
"<Button-5>", onTextScroll)
22447 CHATestVEntry.delete(0,
"end")
22448 CHATestVEntry.insert(0,5.0)
22452 TestMode = Frame( frame1 )
22453 TestMode.grid(row=4, column=0, sticky=W)
22454 modelab = Label(TestMode, text=
"Known Res", style=
"A10B.TLabel")
22455 modelab.pack(side=LEFT)
22456 rm3 = Radiobutton(TestMode, text=
"Ext", variable=RMode, value=0)
22457 rm3.pack(side=LEFT)
22458 rm4 = Radiobutton(TestMode, text=
"Int", variable=RMode, value=1)
22459 rm4.pack(side=LEFT)
22461 TestRA = Frame( frame1 )
22462 TestRA.grid(row=5, column=0, sticky=W)
22463 chatestrlab = Label(TestRA, text=
"Known Res", style=
"A10B.TLabel")
22464 chatestrlab.pack(side=LEFT)
22465 CHATestREntry = Entry(TestRA, width=6, cursor=
'double_arrow')
22466 CHATestREntry.pack(side=LEFT)
22467 CHATestREntry.bind(
'<MouseWheel>', onTextScroll)
22468 CHATestREntry.bind(
"<Button-4>", onTextScroll)
22469 CHATestREntry.bind(
"<Button-5>", onTextScroll)
22470 CHATestREntry.delete(0,
"end")
22471 CHATestREntry.insert(0,OnBoardRes)
22473 ohmdismissclbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroyOhmScreen)
22474 ohmdismissclbutton.grid(row=6, column=0, sticky=W, pady=7)
22477 global ohmwindow, OhmStatus, OhmDisp
22482 ohmwindow.destroy()
22485 global FMulXEntry, MulXEntry, etswindow, ETSStatus, ETSDisp, ETSDir, ETSts, eqivsamplerate
22486 global SAMPLErate, DivXEntry, FOffEntry, FminDisp, enb1, rtsrlab, etssrlab, RevDate, SWRev
22487 global MinigenScreenStatus, DeBugMode
22488 global FrameRefief, BorderSize
22491 if ETSStatus.get() == 0:
22492 BaseFreq = (-10, -15, -20, -25, -30, -35, -40, -45, -50, -60, -70, -80, -90, -100)
22495 etswindow = Toplevel()
22496 etswindow.title(
"ETS Controls " + SWRev + RevDate)
22497 etswindow.resizable(FALSE,FALSE)
22498 etswindow.protocol(
"WM_DELETE_WINDOW", DestroyETSScreen)
22499 frame1 = Frame(etswindow, borderwidth=BorderSize, relief=FrameRefief)
22500 frame1.grid(row=0, column=0, sticky=W)
22502 SRstring =
"RT Sample Rate = " + str(SAMPLErate)
22503 rtsrlab = Label(frame1, text=SRstring, style=
"A10B.TLabel")
22504 rtsrlab.grid(row=1, column=0, sticky=W)
22505 ESRstring =
"ET Sample Rate = " + str(SAMPLErate)
22506 etssrlab = Label(frame1, text=SRstring, style=
"A10B.TLabel")
22507 etssrlab.grid(row=2, column=0, sticky=W)
22508 etssrbutton = Button(frame1, text=
"Set RT Sample Rate", command=MakeSampleRateMenu)
22509 etssrbutton.grid(row=3, column=0, sticky=W, pady=7)
22510 enb1 = Checkbutton(frame1,text=
"Enable ETS", variable=ETSDisp, command=ETSCheckBox)
22511 enb1.grid(row=4, column=0, sticky=W)
22513 Divx = Frame( frame1 )
22514 Divx.grid(row=5, column=0, sticky=W)
22515 DivXEntry = Entry(Divx, width=6, cursor=
'double_arrow')
22516 DivXEntry.bind(
'<MouseWheel>', ETSscroll)
22517 DivXEntry.bind(
"<Button-4>", ETSscroll)
22518 DivXEntry.bind(
"<Button-5>", ETSscroll)
22519 DivXEntry.pack(side=RIGHT)
22520 DivXEntry.delete(0,
"end")
22521 DivXEntry.insert(0,2)
22522 divxlab = Label( Divx, text =
"Divide Factor")
22523 divxlab.pack(side=RIGHT)
22527 FOffEntry = Label(frame1, text=
"Samples")
22528 FOffEntry.grid(row=GridRow+1, column=0, sticky=W)
22529 MulXEntry = Label( frame1, text =
"Rec Len Mul")
22530 MulXEntry.grid(row=GridRow+2, column=0, sticky=W)
22531 GridRow = GridRow + 2
22533 eqivsamplerate = Label(frame1, text=
"MHz", style=
"A10B.TLabel")
22534 eqivsamplerate.grid(row=GridRow+1, column=0, sticky=W)
22536 FConv = Frame( frame1 )
22537 FConv.grid(row=GridRow+2, column=0, sticky=W)
22538 FMulXEntry = Entry(FConv, width=3, cursor=
'double_arrow')
22539 FMulXEntry.bind(
'<MouseWheel>', ETSscroll)
22540 FMulXEntry.bind(
"<Button-4>", ETSscroll)
22541 FMulXEntry.bind(
"<Button-5>", ETSscroll)
22542 FMulXEntry.pack(side=RIGHT)
22543 FMulXEntry.delete(0,
"end")
22544 FMulXEntry.insert(0,1)
22545 fminlab = Label( FConv, text =
"Freq Multiplier")
22546 fminlab.pack(side=RIGHT)
22548 FminDisp = Label(frame1, text=
"32768 Hz", style=
"A10B.TLabel")
22549 FminDisp.grid(row=GridRow+3, column=0, sticky=W)
22551 if MinigenScreenStatus.get() > 0:
22552 mgloadbutton = Button(frame1, text=
"Load to MinGen", command=MGLoad)
22553 mgloadbutton.grid(row=GridRow+4, column=0, sticky=W)
22554 GridRow = GridRow + 1
22556 dirlab = Label(frame1, text=
"Sample Data Order", style=
"A10B.TLabel")
22557 dirlab.grid(row=GridRow+5, column=0, sticky=W)
22558 DataMode = Frame( frame1 )
22559 DataMode.grid(row=GridRow+6, column=0, sticky=W)
22560 dm3 = Radiobutton(DataMode, text=
"Forward", variable=ETSDir, value=0)
22561 dm3.pack(side=LEFT)
22562 dm4 = Radiobutton(DataMode, text=
"Reverse", variable=ETSDir, value=1)
22563 dm4.pack(side=LEFT)
22564 tclab = Label(frame1, text=
"CH B Time Shift", style=
"A10B.TLabel")
22565 tclab.grid(row=GridRow+7, column=0, sticky=W)
22566 TSMode = Frame( frame1 )
22567 TSMode.grid(row=GridRow+8, column=0, sticky=W)
22568 ETSts = Entry(TSMode, width=6, cursor=
'double_arrow')
22569 ETSts.bind(
'<MouseWheel>', ETSscroll)
22570 ETSts.bind(
"<Button-4>", ETSscroll)
22571 ETSts.bind(
"<Button-5>", ETSscroll)
22572 ETSts.pack(side=RIGHT)
22573 ETSts.delete(0,
"end")
22575 ETStslab = Label( TSMode, text =
"Factor")
22576 ETStslab.pack(side=RIGHT)
22578 etsdismissclbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroyETSScreen)
22579 etsdismissclbutton.grid(row=GridRow+9, column=0, sticky=W, pady=7)
22584 global etswindow, ETSStatus, ETSDisp
22589 etswindow.destroy()
22592 global MinigenFout, Fmin, ETSDir
22594 MinigenFout.delete(0,
"end")
22595 if ETSDir.get() == 0:
22596 MinigenFout.insert(0,Fmin+20)
22598 MinigenFout.insert(0,Fmin-20)
22612 global Two_X_Sample, HtMulEntry, ETSts, etssrlab, SAMPLErate
22617 TscaleX = float(HtMulEntry.get())
22619 HtMulEntry.delete(0,END)
22620 HtMulEntry.insert(0, 1)
22621 if Two_X_Sample.get() == 0:
22622 ToffsetX = TscaleX/10.0
22625 ETSts.delete(0,
"end")
22626 ETSts.insert(0,ToffsetX)
22627 SRstring =
"ET Sample Rate = " + str(SAMPLErate*TscaleX)
22628 etssrlab.config(text=SRstring)
22634 global FMulXEntry, MulXEntry, ETSStatus, ETSDisp, ETSDir, ETSts, eqivsamplerate, MaxETSrecord
22635 global SAMPLErate, DivXEntry, FOffEntry, FminDisp, DivX, FOff, MulX, Fmin, FMul, SAMPLErate, TIMEdiv
22636 global FminEntry, HtMulEntry, Two_X_Sample, DeBugMode
22639 MaxETSrecord = int(SAMPLErate * 10 * TIMEdiv / 1000.0)
22641 MaxETSrecord = int(SAMPLErate * 20 * TIMEdiv / 1000.0)
22642 if (MaxETSrecord*100) > MaxSamples:
22643 MaxETSrecord = MaxSamples / 100
22645 DivX = float(eval(DivXEntry.get()))
22650 DivXEntry.delete(0,END)
22651 DivXEntry.insert(0, DivX)
22653 DivXEntry.delete(0,END)
22654 DivXEntry.insert(0, DivX)
22657 MulX = (DivX*SAMPLErate)/(100*FOff)
22658 while MulX > MaxETSrecord:
22660 MulX = (DivX*SAMPLErate)/(100*FOff)
22663 SRstring =
"Rec Len Mul = " + str(MulX) +
" samples"
22664 MulXEntry.config(text = SRstring)
22665 SRstring =
"Offset = " + str(FOff) +
" samples"
22666 FOffEntry.config(text = SRstring)
22667 baseFreq = SAMPLErate/DivX
22669 FMul = float(eval(FMulXEntry.get()))
22672 FMulXEntry.delete(0,END)
22673 FMulXEntry.insert(0, int(FMul))
22676 FMulXEntry.delete(0,END)
22677 FMulXEntry.insert(0, int(FMul))
22679 FMulXEntry.delete(0,END)
22680 FMulXEntry.insert(0, int(FMul))
22681 FreqMin = baseFreq * FMul
22682 SRstring =
"Multiplied Freq = " +
' {0:.1f} '.format(FreqMin) +
" Hz"
22683 FminDisp.config(text = SRstring)
22684 SRstring =
"Base Frequency = " +
' {0:.2f} '.format(baseFreq) +
" Hz"
22685 eqivsamplerate.config(text = SRstring)
22688 MinFreq = eval(FminEntry.get()) * 1000
22690 FminEntry.delete(0,END)
22691 FminEntry.insert(0, 25)
22694 TscaleX = int((MinFreq)/(DivX * (MinFreq - FreqMin)))
22702 TscaleX = abs(TscaleX)
22703 if Two_X_Sample.get() == 0:
22704 ToffsetX = TscaleX/10.0
22707 ETSts.delete(0,
"end")
22708 ETSts.insert(0,ToffsetX)
22710 HtMulEntry.delete(0,END)
22711 HtMulEntry.insert(0, TscaleX)
22712 SRstring =
"RT Sample Rate = " + str(SAMPLErate)
22713 rtsrlab.config(text=SRstring)
22714 SRstring =
"ET Sample Rate = " + str(SAMPLErate*TscaleX)
22715 etssrlab.config(text=SRstring)
22726 global GridWidth, TRACEwidth, TRACEaverage, Vdiv, HarmonicMarkers, ZEROstuffing, RevDate
22727 global Settingswindow, SettingsStatus, ZSTuff, TAvg, VDivE, TwdthE, GwdthE, HarMon
22728 global AWG_Amp_Mode, SWRev, EnableHSsampling, Auto_ETS_Comp, ETS_TC1, ETS_A1, ETS_TC2, ETS_A2
22729 global ets_TC1Entry, ets_A1Entry, ets_TC2Entry, ets_A2Entry, TrgLPFEntry, Trigger_LPF_length
22730 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
22731 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
22732 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
22733 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
22734 global FrameRefief, BorderSize
22736 if SettingsStatus.get() == 0:
22737 SettingsStatus.set(1)
22738 Settingswindow = Toplevel()
22739 Settingswindow.title(
"Settings " + SWRev + RevDate)
22740 Settingswindow.resizable(FALSE,FALSE)
22741 Settingswindow.protocol(
"WM_DELETE_WINDOW", DestroySettings)
22742 frame1 = Frame(Settingswindow, borderwidth=BorderSize, relief=FrameRefief)
22743 frame1.grid(row=0, column=0, sticky=W)
22745 zstlab = Label(frame1, text=
"FFT Zero Stuffing", style=
"A10B.TLabel")
22746 zstlab.grid(row=0, column=0, sticky=W)
22747 zstMode = Frame( frame1 )
22748 zstMode.grid(row=0, column=1, sticky=W)
22749 ZSTuff = Entry(zstMode, width=4, cursor=
'double_arrow')
22750 ZSTuff.bind(
"<Return>", SettingsTextKey)
22751 ZSTuff.bind(
'<MouseWheel>', Settingsscroll)
22752 ZSTuff.bind(
"<Button-4>", Settingsscroll)
22753 ZSTuff.bind(
"<Button-5>", Settingsscroll)
22754 ZSTuff.bind(
'<Key>', SettingsTextKey)
22755 ZSTuff.pack(side=RIGHT)
22756 ZSTuff.delete(0,
"end")
22757 ZSTuff.insert(0,ZEROstuffing.get())
22759 Avglab = Label(frame1, text=
"Number Traces to Average", style=
"A10B.TLabel")
22760 Avglab.grid(row=1, column=0, sticky=W)
22761 AvgMode = Frame( frame1 )
22762 AvgMode.grid(row=1, column=1, sticky=W)
22763 TAvg = Entry(AvgMode, width=4, cursor=
'double_arrow')
22764 TAvg.bind(
"<Return>", SettingsTextKey)
22765 TAvg.bind(
'<MouseWheel>', Settingsscroll)
22766 TAvg.bind(
"<Button-4>", Settingsscroll)
22767 TAvg.bind(
"<Button-5>", Settingsscroll)
22768 TAvg.bind(
'<Key>', SettingsTextKey)
22769 TAvg.pack(side=RIGHT)
22770 TAvg.delete(0,
"end")
22771 TAvg.insert(0,TRACEaverage.get())
22773 HarMlab = Label(frame1, text=
"Number of Harmonic Markers", style=
"A10B.TLabel")
22774 HarMlab.grid(row=2, column=0, sticky=W)
22775 HarMMode = Frame( frame1 )
22776 HarMMode.grid(row=2, column=1, sticky=W)
22777 HarMon = Entry(HarMMode, width=4, cursor=
'double_arrow')
22778 HarMon.bind(
"<Return>", SettingsTextKey)
22779 HarMon.bind(
'<MouseWheel>', Settingsscroll)
22780 HarMon.bind(
"<Button-4>", Settingsscroll)
22781 HarMon.bind(
"<Button-5>", Settingsscroll)
22782 HarMon.bind(
'<Key>', SettingsTextKey)
22783 HarMon.pack(side=RIGHT)
22784 HarMon.delete(0,
"end")
22785 HarMon.insert(0,HarmonicMarkers.get())
22787 Vdivlab = Label(frame1, text=
"Number Vertical Div (SA, Bode)", style=
"A10B.TLabel")
22788 Vdivlab.grid(row=3, column=0, sticky=W)
22789 VdivMode = Frame( frame1 )
22790 VdivMode.grid(row=3, column=1, sticky=W)
22791 VDivE = Entry(VdivMode, width=4, cursor=
'double_arrow')
22792 VDivE.bind(
"<Return>", SettingsTextKey)
22793 VDivE.bind(
'<MouseWheel>', Settingsscroll)
22794 VDivE.bind(
"<Button-4>", Settingsscroll)
22795 VDivE.bind(
"<Button-5>", Settingsscroll)
22796 VDivE.bind(
'<Key>', SettingsTextKey)
22797 VDivE.pack(side=RIGHT)
22798 VDivE.delete(0,
"end")
22799 VDivE.insert(0,Vdiv.get())
22801 Twdthlab = Label(frame1, text=
"Trace Width in Pixels", style=
"A10B.TLabel")
22802 Twdthlab.grid(row=4, column=0, sticky=W)
22803 TwdthMode = Frame( frame1 )
22804 TwdthMode.grid(row=4, column=1, sticky=W)
22805 TwdthE = Entry(TwdthMode, width=4, cursor=
'double_arrow')
22806 TwdthE.bind(
"<Return>", SettingsTextKey)
22807 TwdthE.bind(
'<MouseWheel>', Settingsscroll)
22808 TwdthE.bind(
"<Button-4>", Settingsscroll)
22809 TwdthE.bind(
"<Button-5>", Settingsscroll)
22810 TwdthE.bind(
'<Key>', SettingsTextKey)
22811 TwdthE.pack(side=RIGHT)
22812 TwdthE.delete(0,
"end")
22813 TwdthE.insert(0,TRACEwidth.get())
22815 Gwdthlab = Label(frame1, text=
"Grid Width in Pixels", style=
"A10B.TLabel")
22816 Gwdthlab.grid(row=5, column=0, sticky=W)
22817 GwdthMode = Frame( frame1 )
22818 GwdthMode.grid(row=5, column=1, sticky=W)
22819 GwdthE = Entry(GwdthMode, width=4, cursor=
'double_arrow')
22820 GwdthE.bind(
"<Return>", SettingsTextKey)
22821 GwdthE.bind(
'<MouseWheel>', Settingsscroll)
22822 GwdthE.bind(
"<Button-4>", Settingsscroll)
22823 GwdthE.bind(
"<Button-5>", Settingsscroll)
22824 GwdthE.bind(
'<Key>', SettingsTextKey)
22825 GwdthE.pack(side=RIGHT)
22826 GwdthE.delete(0,
"end")
22827 GwdthE.insert(0,GridWidth.get())
22829 trglpflab = Label(frame1, text=
"Trigger LPF Length", style=
"A10B.TLabel")
22830 trglpflab.grid(row=6, column=0, sticky=W)
22831 TrgLPFMode = Frame( frame1 )
22832 TrgLPFMode.grid(row=6, column=1, sticky=W)
22833 TrgLPFEntry = Entry(TrgLPFMode, width=4, cursor=
'double_arrow')
22834 TrgLPFEntry.bind(
"<Return>", SettingsTextKey)
22835 TrgLPFEntry.bind(
'<MouseWheel>', Settingsscroll)
22836 TrgLPFEntry.bind(
"<Button-4>", Settingsscroll)
22837 TrgLPFEntry.bind(
"<Button-5>", Settingsscroll)
22838 TrgLPFEntry.bind(
'<Key>', SettingsTextKey)
22839 TrgLPFEntry.pack(side=RIGHT)
22840 TrgLPFEntry.delete(0,
"end")
22841 TrgLPFEntry.insert(0,Trigger_LPF_length.get())
22843 AwgAmplrb1 = Radiobutton(frame1, text=
"AWG Min/Max", variable=AWG_Amp_Mode, value=0, command=UpdateAWGWin)
22844 AwgAmplrb1.grid(row=7, column=0, sticky=W)
22845 AwgAmplrb2 = Radiobutton(frame1, text=
"AWG Amp/Off ", variable=AWG_Amp_Mode, value=1, command=UpdateAWGWin)
22846 AwgAmplrb2.grid(row=7, column=1, sticky=W)
22848 cha_Rcomplab = Label(frame1, text=
"CHA Comp, TC1 (uSec), A1", style=
"A10B.TLabel")
22849 cha_Rcomplab.grid(row=8, column=0, sticky=W)
22850 cha_RcomplabMode = Frame( frame1 )
22851 cha_RcomplabMode.grid(row=8, column=1, sticky=W)
22852 cha_TC1Entry = Entry(cha_RcomplabMode, width=5, cursor=
'double_arrow')
22853 cha_TC1Entry.bind(
"<Return>", SettingsTextKey)
22854 cha_TC1Entry.bind(
'<MouseWheel>', Settingsscroll)
22855 cha_TC1Entry.bind(
"<Button-4>", Settingsscroll)
22856 cha_TC1Entry.bind(
"<Button-5>", Settingsscroll)
22857 cha_TC1Entry.bind(
'<Key>', SettingsTextKey)
22858 cha_TC1Entry.pack(side=LEFT)
22859 cha_TC1Entry.delete(0,
"end")
22860 cha_TC1Entry.insert(0,CHA_TC1.get())
22861 cha_A1Entry = Entry(cha_RcomplabMode, width=5, cursor=
'double_arrow')
22862 cha_A1Entry.bind(
"<Return>", SettingsTextKey)
22863 cha_A1Entry.bind(
'<MouseWheel>', Settingsscroll)
22864 cha_A1Entry.bind(
"<Button-4>", Settingsscroll)
22865 cha_A1Entry.bind(
"<Button-5>", Settingsscroll)
22866 cha_A1Entry.bind(
'<Key>', SettingsTextKey)
22867 cha_A1Entry.pack(side=LEFT)
22868 cha_A1Entry.delete(0,
"end")
22869 cha_A1Entry.insert(0,CHA_A1.get())
22871 cha_Ccomplab = Label(frame1, text=
"CHA Comp, TC2 (uSec), A2", style=
"A10B.TLabel")
22872 cha_Ccomplab.grid(row=9, column=0, sticky=W)
22873 cha_CcomplabMode = Frame( frame1 )
22874 cha_CcomplabMode.grid(row=9, column=1, sticky=W)
22875 cha_TC2Entry = Entry(cha_CcomplabMode, width=5, cursor=
'double_arrow')
22876 cha_TC2Entry.bind(
"<Return>", SettingsTextKey)
22877 cha_TC2Entry.bind(
'<MouseWheel>', Settingsscroll)
22878 cha_TC2Entry.bind(
"<Button-4>", Settingsscroll)
22879 cha_TC2Entry.bind(
"<Button-5>", Settingsscroll)
22880 cha_TC2Entry.bind(
'<Key>', SettingsTextKey)
22881 cha_TC2Entry.pack(side=LEFT)
22882 cha_TC2Entry.delete(0,
"end")
22883 cha_TC2Entry.insert(0,CHA_TC2.get())
22884 cha_A2Entry = Entry(cha_CcomplabMode, width=5, cursor=
'double_arrow')
22885 cha_A2Entry.bind(
"<Return>", SettingsTextKey)
22886 cha_A2Entry.bind(
'<MouseWheel>', Settingsscroll)
22887 cha_A2Entry.bind(
"<Button-4>", Settingsscroll)
22888 cha_A2Entry.bind(
"<Button-5>", Settingsscroll)
22889 cha_A2Entry.bind(
'<Key>', SettingsTextKey)
22890 cha_A2Entry.pack(side=LEFT)
22891 cha_A2Entry.delete(0,
"end")
22892 cha_A2Entry.insert(0,CHA_A2.get())
22894 chb_Rcomplab = Label(frame1, text=
"CHB Comp, TC1 (uSec), A1", style=
"A10B.TLabel")
22895 chb_Rcomplab.grid(row=10, column=0, sticky=W)
22896 chb_RcomplabMode = Frame( frame1 )
22897 chb_RcomplabMode.grid(row=10, column=1, sticky=W)
22898 chb_TC1Entry = Entry(chb_RcomplabMode, width=5, cursor=
'double_arrow')
22899 chb_TC1Entry.bind(
"<Return>", SettingsTextKey)
22900 chb_TC1Entry.bind(
'<MouseWheel>', Settingsscroll)
22901 chb_TC1Entry.bind(
"<Button-4>", Settingsscroll)
22902 chb_TC1Entry.bind(
"<Button-5>", Settingsscroll)
22903 chb_TC1Entry.bind(
'<Key>', SettingsTextKey)
22904 chb_TC1Entry.pack(side=LEFT)
22905 chb_TC1Entry.delete(0,
"end")
22906 chb_TC1Entry.insert(0,CHB_TC1.get())
22907 chb_A1Entry = Entry(chb_RcomplabMode, width=5, cursor=
'double_arrow')
22908 chb_A1Entry.bind(
"<Return>", SettingsTextKey)
22909 chb_A1Entry.bind(
'<MouseWheel>', Settingsscroll)
22910 chb_A1Entry.bind(
"<Button-4>", Settingsscroll)
22911 chb_A1Entry.bind(
"<Button-5>", Settingsscroll)
22912 chb_A1Entry.bind(
'<Key>', SettingsTextKey)
22913 chb_A1Entry.pack(side=LEFT)
22914 chb_A1Entry.delete(0,
"end")
22915 chb_A1Entry.insert(0,CHB_A1.get())
22917 chb_Ccomplab = Label(frame1, text=
"CHB Comp, TC2 (uSec), A2", style=
"A10B.TLabel")
22918 chb_Ccomplab.grid(row=11, column=0, sticky=W)
22919 chb_CcomplabMode = Frame( frame1 )
22920 chb_CcomplabMode.grid(row=11, column=1, sticky=W)
22921 chb_TC2Entry = Entry(chb_CcomplabMode, width=5, cursor=
'double_arrow')
22922 chb_TC2Entry.bind(
"<Return>", SettingsTextKey)
22923 chb_TC2Entry.bind(
'<MouseWheel>', Settingsscroll)
22924 chb_TC2Entry.bind(
"<Button-4>", Settingsscroll)
22925 chb_TC2Entry.bind(
"<Button-5>", Settingsscroll)
22926 chb_TC2Entry.bind(
'<Key>', SettingsTextKey)
22927 chb_TC2Entry.pack(side=LEFT)
22928 chb_TC2Entry.delete(0,
"end")
22929 chb_TC2Entry.insert(0,CHB_TC2.get())
22930 chb_A2Entry = Entry(chb_CcomplabMode, width=5, cursor=
'double_arrow')
22931 chb_A2Entry.bind(
"<Return>", SettingsTextKey)
22932 chb_A2Entry.bind(
'<MouseWheel>', Settingsscroll)
22933 chb_A2Entry.bind(
"<Button-4>", Settingsscroll)
22934 chb_A2Entry.bind(
"<Button-5>", Settingsscroll)
22935 chb_A2Entry.bind(
'<Key>', SettingsTextKey)
22936 chb_A2Entry.pack(side=LEFT)
22937 chb_A2Entry.delete(0,
"end")
22938 chb_A2Entry.insert(0,CHB_A2.get())
22940 if EnableHSsampling > 0:
22941 hs_ckb1 = Checkbutton(frame1, text=
"Auto Set ETS Comp", variable=Auto_ETS_Comp, command=SetETSComp)
22942 hs_ckb1.grid(row=12, column=0, sticky=W)
22943 hs1_Complab = Label(frame1, text=
"ETS Comp, TC1 (uSec), A1", style=
"A10B.TLabel")
22944 hs1_Complab.grid(row=13, column=0, sticky=W)
22945 hs1_ComplabMode = Frame( frame1 )
22946 hs1_ComplabMode.grid(row=13, column=1, sticky=W)
22947 ets_TC1Entry = Entry(hs1_ComplabMode, width=5, cursor=
'double_arrow')
22948 ets_TC1Entry.bind(
"<Return>", SettingsTextKey)
22949 ets_TC1Entry.bind(
'<MouseWheel>', Settingsscroll)
22950 ets_TC1Entry.bind(
"<Button-4>", Settingsscroll)
22951 ets_TC1Entry.bind(
"<Button-5>", Settingsscroll)
22952 ets_TC1Entry.bind(
'<Key>', SettingsTextKey)
22953 ets_TC1Entry.pack(side=LEFT)
22954 ets_TC1Entry.delete(0,
"end")
22955 ets_TC1Entry.insert(0,ETS_TC1.get())
22956 ets_A1Entry = Entry(hs1_ComplabMode, width=5, cursor=
'double_arrow')
22957 ets_A1Entry.bind(
"<Return>", SettingsTextKey)
22958 ets_A1Entry.bind(
'<MouseWheel>', Settingsscroll)
22959 ets_A1Entry.bind(
"<Button-4>", Settingsscroll)
22960 ets_A1Entry.bind(
"<Button-5>", Settingsscroll)
22961 ets_A1Entry.bind(
'<Key>', SettingsTextKey)
22962 ets_A1Entry.pack(side=LEFT)
22963 ets_A1Entry.delete(0,
"end")
22964 ets_A1Entry.insert(0,ETS_A1.get())
22966 hs2_Complab = Label(frame1, text=
"ETS Comp, TC2 (uSec), A2", style=
"A10B.TLabel")
22967 hs2_Complab.grid(row=14, column=0, sticky=W)
22968 hs2_ComplabMode = Frame( frame1 )
22969 hs2_ComplabMode.grid(row=14, column=1, sticky=W)
22970 ets_TC2Entry = Entry(hs2_ComplabMode, width=5, cursor=
'double_arrow')
22971 ets_TC2Entry.bind(
"<Return>", SettingsTextKey)
22972 ets_TC2Entry.bind(
'<MouseWheel>', Settingsscroll)
22973 ets_TC2Entry.bind(
"<Button-4>", Settingsscroll)
22974 ets_TC2Entry.bind(
"<Button-5>", Settingsscroll)
22975 ets_TC2Entry.bind(
'<Key>', SettingsTextKey)
22976 ets_TC2Entry.pack(side=LEFT)
22977 ets_TC2Entry.delete(0,
"end")
22978 ets_TC2Entry.insert(0,ETS_TC2.get())
22979 ets_A2Entry = Entry(hs2_ComplabMode, width=5, cursor=
'double_arrow')
22980 ets_A2Entry.bind(
"<Return>", SettingsTextKey)
22981 ets_A2Entry.bind(
'<MouseWheel>', Settingsscroll)
22982 ets_A2Entry.bind(
"<Button-4>", Settingsscroll)
22983 ets_A2Entry.bind(
"<Button-5>", Settingsscroll)
22984 ets_A2Entry.bind(
'<Key>', SettingsTextKey)
22985 ets_A2Entry.pack(side=LEFT)
22986 ets_A2Entry.delete(0,
"end")
22987 ets_A2Entry.insert(0,ETS_A2.get())
22989 Settingsdismissbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroySettings)
22990 Settingsdismissbutton.grid(row=15, column=0, sticky=W, pady=7)
22992 Settingsdismissbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroySettings)
22993 Settingsdismissbutton.grid(row=12, column=0, sticky=W, pady=7)
22996 global Auto_ETS_Comp, ETS_TC1, ETS_A1, ETS_TC2, ETS_A2
22997 global ets_TC1Entry, ets_A1Entry, ets_TC2Entry, ets_A2Entry
22998 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
22999 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
23000 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
23001 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
23003 if Auto_ETS_Comp.get() == 1:
23005 MulX = float(HtMulEntry.get())
23007 Value = float(ets_TC1Entry.get()) * MulX
23008 cha_TC1Entry.delete(0,
"end")
23009 cha_TC1Entry.insert(0, Value)
23010 cha_A1Entry.delete(0,
"end")
23011 cha_A1Entry.insert(0, ets_A1Entry.get())
23012 chb_TC1Entry.delete(0,
"end")
23013 chb_TC1Entry.insert(0, Value)
23014 chb_A1Entry.delete(0,
"end")
23015 chb_A1Entry.insert(0, ets_A1Entry.get())
23017 Value = float(ets_TC2Entry.get()) * MulX
23018 cha_TC2Entry.delete(0,
"end")
23019 cha_TC2Entry.insert(0, Value)
23020 cha_A2Entry.delete(0,
"end")
23021 cha_A2Entry.insert(0, ets_A2Entry.get())
23022 chb_TC2Entry.delete(0,
"end")
23023 chb_TC2Entry.insert(0, Value)
23024 chb_A2Entry.delete(0,
"end")
23025 chb_A2Entry.insert(0, ets_A2Entry.get())
23036 global GridWidth, TRACEwidth, TRACEaverage, Vdiv, HarmonicMarkers, ZEROstuffing, RevDate
23037 global Settingswindow, SettingsStatus, ZSTuff, TAvg, VDivE, TwdthE, GwdthE, HarMon
23038 global CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
23039 global CHA_A1, CHA_A2, CHB_A1, CHB_A2, TrgLPFEntry, Trigger_LPF_length
23040 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
23041 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
23044 GW = int(eval(GwdthE.get()))
23047 GwdthE.delete(0,END)
23048 GwdthE.insert(0, int(GW))
23051 GwdthE.delete(0,END)
23052 GwdthE.insert(0, int(GW))
23054 GwdthE.delete(0,END)
23055 GwdthE.insert(0, GridWidth.get())
23059 T_length = int(eval(TrgLPFEntry.get()))
23062 TrgLPFEntry.delete(0,END)
23063 TrgLPFEntry.insert(0, int(GW))
23066 TrgLPFEntry.delete(0,END)
23067 TrgLPFEntry.insert(0, int(GW))
23069 TrgLPFEntry.delete(0,END)
23070 TrgLPFEntry.insert(0, Trigger_LPF_length.get())
23071 Trigger_LPF_length.set(T_length)
23074 TW = int(eval(TwdthE.get()))
23077 TwdthE.delete(0,END)
23078 TwdthE.insert(0, int(TW))
23081 TwdthE.delete(0,END)
23082 TwdthE.insert(0, int(TW))
23084 TwdthE.delete(0,END)
23085 TwdthE.insert(0, TRACEwidth.get())
23089 TA = int(eval(TAvg.get()))
23093 TAvg.insert(0, int(TA))
23097 TAvg.insert(0, int(TA))
23100 TAvg.insert(0, TRACEaverage.get())
23101 TRACEaverage.set(TA)
23104 VDv = int(eval(VDivE.get()))
23107 VDivE.delete(0,END)
23108 VDivE.insert(0, int(VDv))
23111 VDivE.delete(0,END)
23112 VDivE.insert(0, int(VDv))
23114 VDivE.delete(0,END)
23115 VDivE.insert(0, Vdiv.get())
23119 HM = int(eval(HarMon.get()))
23122 HarMon.delete(0,END)
23123 HarMon.insert(0, int(HM))
23126 HarMon.delete(0,END)
23127 HarMon.insert(0, int(HM))
23129 HarMon.delete(0,END)
23130 HarMon.insert(0, HarmonicMarkers.get())
23131 HarmonicMarkers.set(HM)
23134 ZST = int(eval(ZSTuff.get()))
23137 ZSTuff.delete(0,END)
23138 ZSTuff.insert(0, int(ZST))
23141 ZSTuff.delete(0,END)
23142 ZSTuff.insert(0, int(ZST))
23144 ZSTuff.delete(0,END)
23145 ZSTuff.insert(0, ZEROstuffing.get())
23146 ZEROstuffing.set(ZST)
23149 TC1A = float(cha_TC1Entry.get())
23153 cha_TC1Entry.delete(0,END)
23154 cha_TC1Entry.insert(0, TC1A)
23156 cha_TC1Entry.delete(0,END)
23157 cha_TC1Entry.insert(0, CHA_TC1.get())
23159 TC2A = float(cha_TC2Entry.get())
23163 cha_TC2Entry.delete(0,END)
23164 cha_TC2Entry.insert(0, TC2A)
23166 cha_TC2Entry.delete(0,END)
23167 cha_TC2Entry.insert(0, CHA_TC2.get())
23170 Gain1A = float(cha_A1Entry.get())
23173 cha_A1Entry.delete(0,END)
23174 cha_A1Entry.insert(0, CHA_A1.get())
23176 Gain2A = float(cha_A2Entry.get())
23179 cha_A2Entry.delete(0,END)
23180 cha_A2Entry.insert(0, CHA_A2.get())
23183 TC1B = float(chb_TC1Entry.get())
23187 chb_TC1Entry.delete(0, END)
23188 chb_TC1Entry.insert(0, TC1B)
23190 chb_TC1Entry.delete(0,END)
23191 chb_TC1Entry.insert(0, CHB_TC1.get())
23193 TC2B = float(chb_TC2Entry.get())
23197 chb_TC2Entry.delete(0, END)
23198 chb_TC2Entry.insert(0, TC2B)
23200 chb_TC2Entry.delete(0,END)
23201 chb_TC2Entry.insert(0, CHB_TC2.get())
23204 Gain1B = float(chb_A1Entry.get())
23207 chb_A1Entry.delete(0,END)
23208 chb_A1Entry.insert(0, CHB_A1.get())
23210 Gain2B = float(chb_A2Entry.get())
23213 chb_A2Entry.delete(0,END)
23214 chb_A2Entry.insert(0, CHB_A2.get())
23220 global Settingswindow, SettingsStatus
23222 SettingsStatus.set(0)
23224 Settingswindow.destroy()
23227 global MouseX, MouseY, MouseWidget
23229 MouseWidget = event.widget
23230 MouseX, MouseY = event.x, event.y
23233 global FminEntry, CHAfreq
23236 String =
'{0:.3f}'.format(CHAfreq/1000)
23237 FminEntry.delete(0,
"end")
23238 FminEntry.insert(0,String)
23241 global CHAVGainEntry, CHAVOffsetEntry
23243 CHAVGainEntry.delete(0,
"end")
23244 CHAVGainEntry.insert(0,1.0)
23245 CHAVOffsetEntry.delete(0,
"end")
23246 CHAVOffsetEntry.insert(0,0.0)
23249 global CHBVGainEntry, CHBVOffsetEntry
23251 CHBVGainEntry.delete(0,
"end")
23252 CHBVGainEntry.insert(0,1.0)
23253 CHBVOffsetEntry.delete(0,
"end")
23254 CHBVOffsetEntry.insert(0,0.0)
23257 global CHAIGainEntry, CHAIOffsetEntry
23259 CHAIGainEntry.delete(0,
"end")
23260 CHAIGainEntry.insert(0,1.0)
23261 CHAIOffsetEntry.delete(0,
"end")
23262 CHAIOffsetEntry.insert(0,0.0)
23265 global CHBIGainEntry, CHBIOffsetEntry
23267 CHBIGainEntry.delete(0,
"end")
23268 CHBIGainEntry.insert(0,1.0)
23269 CHBIOffsetEntry.delete(0,
"end")
23270 CHBIOffsetEntry.insert(0,0.0)
23273 global EnablePhaseAnalizer, EnableSpectrumAnalizer, EnableBodePlotter, EnableImpedanceAnalizer
23274 global EnableOhmMeter, OOTphckb, OOTBuildPhAScreen, OOTckb3, OOTBuildSpectrumScreen, OOTckb5, ckb1
23275 global OOTBuildBodeScreen, OOTckb4, OOTBuildIAScreen, OOTckb6, OOTBuildOhmScreen, OOTScreenStatus
23276 global OOTwindow, SWRev, RevDate, BorderSize, FrameRefief, OOTdismissclbutton, EnableDigIO
23277 global EnablePIODACMode, EnableMuxMode, EnableMinigenMode, EnablePmodDA1Mode, EnableDigPotMode, EnableGenericSerialMode
23278 global EnableAD5626SerialMode, EnableDigitalFilter, EnableCommandInterface, EnableMeasureScreen, EnableETSScreen
23280 if OOTScreenStatus.get() == 0:
23281 OOTScreenStatus.set(1)
23282 OOTwindow = Toplevel()
23283 OOTwindow.title(
"Instruments " + SWRev + RevDate)
23284 OOTwindow.resizable(FALSE,FALSE)
23285 OOTwindow.protocol(
"WM_DELETE_WINDOW", DestroyOOTwindow)
23286 frame1 = Frame(OOTwindow, borderwidth=BorderSize, relief=FrameRefief)
23287 frame1.grid(row=0, column=0, sticky=W)
23290 timebtn = Frame( frame1 )
23291 timebtn.grid(row=nextrow, column=0, sticky=W)
23292 ckb1 = Checkbutton(timebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=TimeDisp, command=TimeCheckBox)
23293 ckb1.pack(side=LEFT)
23294 timelab = Label(timebtn, text=
"Time Plot")
23295 timelab.pack(side=LEFT)
23296 nextrow = nextrow + 1
23297 if EnablePhaseAnalizer > 0:
23298 phasebtn = Frame( frame1 )
23299 phasebtn.grid(row=nextrow, column=0, sticky=W)
23300 OOTphckb = Checkbutton(phasebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=PhADisp, command=PhACheckBox)
23301 OOTphckb.pack(side=LEFT)
23302 OOTBuildPhAScreen = Button(phasebtn, text=
"Phasor Plot", style=
"W11.TButton", command=MakePhAWindow)
23303 OOTBuildPhAScreen.pack(side=LEFT)
23304 nextrow = nextrow + 1
23306 if EnableSpectrumAnalizer > 0:
23307 freqbtn = Frame( frame1 )
23308 freqbtn.grid(row=nextrow, column=0, sticky=W)
23309 OOTckb3 = Checkbutton(freqbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=FreqDisp, command=FreqCheckBox)
23310 OOTckb3.pack(side=LEFT)
23311 OOTBuildSpectrumScreen = Button(freqbtn, text=
"Spectrum Plot", style=
"W11.TButton", command=MakeSpectrumWindow)
23312 OOTBuildSpectrumScreen.pack(side=LEFT)
23313 nextrow = nextrow + 1
23315 if EnableBodePlotter > 0:
23316 bodebtn = Frame( frame1 )
23317 bodebtn.grid(row=nextrow, column=0, sticky=W)
23318 OOTckb5 = Checkbutton(bodebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=BodeDisp, command=BodeCheckBox)
23319 OOTckb5.pack(side=LEFT)
23320 OOTBuildBodeScreen = Button(bodebtn, text=
"Bode Plot", style=
"W11.TButton", command=MakeBodeWindow)
23321 OOTBuildBodeScreen.pack(side=LEFT)
23322 nextrow = nextrow + 1
23324 if EnableImpedanceAnalizer > 0:
23325 impdbtn = Frame( frame1 )
23326 impdbtn.grid(row=nextrow, column=0, sticky=W)
23327 OOTckb4 = Checkbutton(impdbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=IADisp, command=IACheckBox)
23328 OOTckb4.pack(side=LEFT)
23329 OOTBuildIAScreen = Button(impdbtn, text=
"Impedance", style=
"W11.TButton", command=MakeIAWindow)
23330 OOTBuildIAScreen.pack(side=LEFT)
23331 nextrow = nextrow + 1
23333 if EnableOhmMeter > 0:
23334 dcohmbtn = Frame( frame1 )
23335 dcohmbtn.grid(row=nextrow, column=0, sticky=W)
23336 OOTckb6 = Checkbutton(dcohmbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=OhmDisp, command=OhmCheckBox)
23337 OOTckb6.pack(side=LEFT)
23338 OOTBuildOhmScreen = Button(dcohmbtn, text=
"Ohmmeter", style=
"W11.TButton", command=MakeOhmWindow)
23339 OOTBuildOhmScreen.pack(side=LEFT)
23340 nextrow = nextrow + 1
23342 if EnableDigIO > 0:
23343 OOTBuildDigScreen = Button(frame1, text=
"Digital I/O Screen", style=
"W17.TButton", command=MakeDigScreen)
23344 OOTBuildDigScreen.grid(row=nextrow, column=0, sticky=W)
23345 nextrow = nextrow + 1
23347 if EnablePIODACMode > 0:
23348 OOTBuildDacScreen = Button(frame1, text=
"PIO-DAC Screen", style=
"W17.TButton", command=MakeDacScreen)
23349 OOTBuildDacScreen.grid(row=nextrow, column=0, sticky=W)
23350 nextrow = nextrow + 1
23351 if EnableMuxMode > 0:
23352 OOTBuildMuxScreen = Button(frame1, text=
"Analog In Mux Screen", style=
"W17.TButton", command=MakeMuxModeWindow)
23353 OOTBuildMuxScreen.grid(row=nextrow, column=0, sticky=W)
23354 nextrow = nextrow + 1
23355 if EnableMinigenMode > 0:
23356 OOTBuildMinigenScreen = Button(frame1, text=
"AD983x DDS Screen", style=
"W17.TButton", command=MakeMinigenWindow)
23357 OOTBuildMinigenScreen.grid(row=nextrow, column=0, sticky=W)
23358 nextrow = nextrow + 1
23359 if EnablePmodDA1Mode > 0:
23360 OOTBuildDA1Screen = Button(frame1, text=
"PMOD DA1 Screen", style=
"W17.TButton", command=MakeDA1Window)
23361 OOTBuildDA1Screen.grid(row=nextrow, column=0, sticky=W)
23362 nextrow = nextrow + 1
23363 if EnableDigPotMode >0:
23364 OOTBuildDigPotScreen = Button(frame1, text=
"Dig Pot Screen", style=
"W17.TButton", command=MakeDigPotWindow)
23365 OOTBuildDigPotScreen.grid(row=nextrow, column=0, sticky=W)
23366 nextrow = nextrow + 1
23367 if EnableGenericSerialMode >0:
23368 OOTGenericSerialScreen = Button(frame1, text=
"Generic Serial Output", style=
"W17.TButton", command=MakeGenericSerialWindow)
23369 OOTGenericSerialScreen.grid(row=nextrow, column=0, sticky=W)
23370 nextrow = nextrow + 1
23371 if EnableAD5626SerialMode >0:
23372 OOTAD5626SerialScreen = Button(frame1, text=
"AD5626 Output", style=
"W17.TButton", command=MakeAD5626Window)
23373 OOTAD5626SerialScreen.grid(row=nextrow, column=0, sticky=W)
23374 nextrow = nextrow + 1
23375 if EnableDigitalFilter >0:
23376 OOTDigFiltScreen = Button(frame1, text=
"Digital Filter", style=
"W17.TButton", command=MakeDigFiltWindow)
23377 OOTDigFiltScreen.grid(row=nextrow, column=0, sticky=W)
23378 nextrow = nextrow + 1
23379 if EnableCommandInterface > 0:
23380 OOTCommandLineScreen = Button(frame1, text=
"Command Interface", style=
"W17.TButton", command=MakeCommandScreen)
23381 OOTCommandLineScreen.grid(row=nextrow, column=0, sticky=W)
23382 nextrow = nextrow + 1
23383 if EnableMeasureScreen > 0:
23384 OOTMeasureScreen = Button(frame1, text=
"Measure Screen", style=
"W17.TButton", command=MakeMeasureScreen)
23385 OOTMeasureScreen.grid(row=nextrow, column=0, sticky=W)
23386 nextrow = nextrow + 1
23387 if EnableETSScreen > 0:
23388 OOTETSScreen = Button(frame1, text=
"ETS Controls", style=
"W17.TButton", command=MakeETSWindow)
23389 OOTETSScreen.grid(row=nextrow, column=0, sticky=W)
23390 nextrow = nextrow + 1
23392 OOTdismissclbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroyOOTwindow)
23393 OOTdismissclbutton.grid(row=nextrow, column=0, sticky=W, pady=7)
23396 global OOTwindow, OOTScreenStatus
23398 OOTScreenStatus.set(0)
23399 OOTwindow.destroy()
23403 TgInput = IntVar(0)
23404 SingleShot = IntVar(0)
23405 ManualTrigger = IntVar(0)
23406 AutoLevel = IntVar(0)
23407 ShowC1_V = IntVar(0)
23410 ShowC1_V = IntVar(0)
23411 ShowC1_I = IntVar(0)
23412 ShowC2_V = IntVar(0)
23413 ShowC2_I = IntVar(0)
23414 ShowAV_I = IntVar(0)
23415 ShowBV_I = IntVar(0)
23416 ShowRA_V = IntVar(0)
23417 ShowRA_I = IntVar(0)
23418 ShowRB_V = IntVar(0)
23419 ShowRB_I = IntVar(0)
23420 ShowMath = IntVar(0)
23421 ShowPB_A = IntVar(0)
23422 ShowPB_B = IntVar(0)
23423 ShowPB_C = IntVar(0)
23424 ShowPB_D = IntVar(0)
23426 ShowC1_VdB = IntVar(0)
23427 ShowC1_P = IntVar(0)
23428 ShowC2_VdB = IntVar(0)
23429 ShowC2_P = IntVar(0)
23430 ShowMarker = IntVar(0)
23431 ShowRA_VdB = IntVar(0)
23432 ShowRA_P = IntVar(0)
23433 ShowRB_VdB = IntVar(0)
23434 ShowRB_P = IntVar(0)
23435 ShowMathSA = IntVar(0)
23436 ShowRMath = IntVar(0)
23437 ShowAWGASA = IntVar(0)
23438 ShowAWGBSA = IntVar(0)
23439 HScaleBP = IntVar(0)
23442 Show_MathX = IntVar(0)
23443 Show_MathY = IntVar(0)
23444 AutoCenterA = IntVar(0)
23445 AutoCenterB = IntVar(0)
23446 SmoothCurves = IntVar(0)
23448 TRACEmodeTime = IntVar(0)
23449 TRACEmodeTime.set(0)
23450 DecimateOption = IntVar(0)
23451 MathTrace = IntVar(0)
23453 AWGAMode = IntVar(0)
23454 AWGAIOMode = IntVar(0)
23455 AWGATerm = IntVar(0)
23456 AWGAShape = IntVar(0)
23457 AWGAPhaseDelay = IntVar(0)
23458 AWGARepeatFlag = IntVar(0)
23459 AWGABurstFlag = IntVar(0)
23460 AWGBBurstFlag = IntVar(0)
23461 AWGBMode = IntVar(0)
23462 AWGBIOMode = IntVar(0)
23463 AWGBTerm = IntVar(0)
23464 AWGBShape = IntVar(0)
23465 AWGBPhaseDelay = IntVar(0)
23466 AWGBRepeatFlag = IntVar(0)
23469 AWGSync = IntVar(0)
23471 BisCompA = IntVar(0)
23474 MeasDCV1 = IntVar(0)
23475 MeasMinV1 = IntVar(0)
23476 MeasMaxV1 = IntVar(0)
23477 MeasMidV1 = IntVar(0)
23478 MeasPPV1 = IntVar(0)
23479 MeasRMSV1 = IntVar(0)
23480 MeasRMSVA_B = IntVar(0)
23481 MeasDCI1 = IntVar(0)
23482 MeasMinI1 = IntVar(0)
23483 MeasMaxI1 = IntVar(0)
23484 MeasMidI1 = IntVar(0)
23485 MeasPPI1 = IntVar(0)
23486 MeasRMSI1 = IntVar(0)
23487 MeasDiffAB = IntVar(0)
23488 MeasDCV2 = IntVar(0)
23489 MeasMinV2 = IntVar(0)
23490 MeasMaxV2 = IntVar(0)
23491 MeasMidV2 = IntVar(0)
23492 MeasPPV2 = IntVar(0)
23493 MeasRMSV2 = IntVar(0)
23494 MeasDCI2 = IntVar(0)
23495 MeasMinI2 = IntVar(0)
23496 MeasMaxI2 = IntVar(0)
23497 MeasMidI2 = IntVar(0)
23498 MeasPPI2 = IntVar(0)
23499 MeasRMSI2 = IntVar(0)
23500 MeasDiffBA = IntVar(0)
23501 MeasUserA = IntVar(0)
23502 MeasAHW = IntVar(0)
23503 MeasALW = IntVar(0)
23504 MeasADCy = IntVar(0)
23505 MeasAPER = IntVar(0)
23506 MeasAFREQ = IntVar(0)
23507 MeasBHW = IntVar(0)
23508 MeasBLW = IntVar(0)
23509 MeasBDCy = IntVar(0)
23510 MeasBPER = IntVar(0)
23511 MeasBFREQ = IntVar(0)
23512 MeasPhase = IntVar(0)
23513 MeasTopV1 = IntVar(0)
23514 MeasBaseV1 = IntVar(0)
23515 MeasTopV2 = IntVar(0)
23516 MeasBaseV2 = IntVar(0)
23517 MeasUserB = IntVar(0)
23518 MeasDelay = IntVar(0)
23519 TimeDisp = IntVar(0)
23522 FreqDisp = IntVar(0)
23523 PhADisp = IntVar(0)
23524 BodeDisp = IntVar(0)
23526 OhmDisp = IntVar(0)
23527 OOTScreenStatus = IntVar(0)
23528 OOTScreenStatus.set(0)
23529 PhAScreenStatus = IntVar(0)
23530 PhAScreenStatus.set(0)
23531 AppendPhAData = IntVar(0)
23532 AppendPhAData.set(0)
23533 PhAPlotMode = IntVar(0)
23534 PhADatafilename =
"PhaseData.csv"
23535 BodeScreenStatus = IntVar(0)
23536 BodeScreenStatus.set(0)
23537 DigScreenStatus = IntVar(0)
23538 DigScreenStatus.set(0)
23539 DacScreenStatus = IntVar(0)
23540 DacScreenStatus.set(0)
23541 MuxScreenStatus = IntVar(0)
23542 MuxScreenStatus.set(0)
23544 MuxSync = IntVar(0)
23545 DualMuxMode = IntVar(0)
23546 ChopMuxMode = IntVar(0)
23547 ChopTrig = IntVar(0)
23548 MinigenScreenStatus = IntVar(0)
23549 MinigenScreenStatus.set(0)
23550 DA1ScreenStatus = IntVar(0)
23551 DA1ScreenStatus.set(0)
23552 DigPotScreenStatus = IntVar(0)
23553 DigPotScreenStatus.set(0)
23554 GenericSerialStatus = IntVar(0)
23555 GenericSerialStatus.set(0)
23556 AD5626SerialStatus = IntVar(0)
23557 AD5626SerialStatus.set(0)
23558 DigFiltStatus = IntVar(0)
23559 DigFiltStatus.set(0)
23560 CommandStatus = IntVar(0)
23561 CommandStatus.set(0)
23562 MeasureStatus = IntVar(0)
23563 MeasureStatus.set(0)
23564 MarkerScale = IntVar(0)
23566 SettingsStatus = IntVar(0)
23567 CHA_RC_HP = IntVar(0)
23568 CHB_RC_HP = IntVar(0)
23569 CHAI_RC_HP = IntVar(0)
23570 CHBI_RC_HP = IntVar(0)
23572 SAVScale = IntVar(0)
23577 if GUITheme ==
"Light":
23578 FrameBG =
"#d7d7d7"
23579 ButtonText =
"#000000"
23580 elif GUITheme ==
"Dark":
23581 FrameBG =
"#484848"
23582 ButtonText =
"#ffffff"
23583 elif GUITheme ==
"Blue":
23584 FrameBG =
"#242468"
23585 ButtonText =
"#d0d0ff"
23586 elif GUITheme ==
"LtBlue":
23587 FrameBG =
"#c0e8ff"
23588 ButtonText =
"#000040"
23589 EntryText =
"#000000"
23590 BoxColor =
"#0000ff"
23591 root.style.configure(
"TFrame", background=FrameBG, borderwidth=BorderSize)
23592 root.style.configure(
"TLabelframe", background=FrameBG)
23593 root.style.configure(
"TLabel", foreground=ButtonText, background=FrameBG, relief=LabRelief)
23594 root.style.configure(
"TEntry", foreground=EntryText, background=FrameBG, relief=ButRelief)
23595 root.style.configure(
"TCheckbutton", foreground=ButtonText, background=FrameBG, indicatorcolor=FrameBG)
23596 root.style.configure(
"TRadiobutton", foreground=ButtonText, background=FrameBG, indicatorcolor=FrameBG)
23597 root.style.configure(
"TButton", foreground=ButtonText, background=FrameBG, highlightcolor=FrameBG, relief=ButRelief)
23599 root.style.configure(
"TSpinbox", arrowsize=SBoxarrow)
23600 root.style.configure(
"W3.TButton", width=3, relief=ButRelief)
23601 root.style.configure(
"W4.TButton", width=4, relief=ButRelief)
23602 root.style.configure(
"W5.TButton", width=5, relief=ButRelief)
23603 root.style.configure(
"W6.TButton", width=6, relief=ButRelief)
23604 root.style.configure(
"W7.TButton", width=7, relief=ButRelief)
23605 root.style.configure(
"W8.TButton", width=8, relief=ButRelief)
23606 root.style.configure(
"W9.TButton", width=9, relief=ButRelief)
23607 root.style.configure(
"W10.TButton", width=10, relief=ButRelief)
23608 root.style.configure(
"W11.TButton", width=11, relief=ButRelief)
23609 root.style.configure(
"W16.TButton", width=16, relief=ButRelief)
23610 root.style.configure(
"W17.TButton", width=17, relief=ButRelief)
23611 root.style.configure(
"Stop.TButton", background=ButtonRed, foreground=
"#000000", width=4, relief=ButRelief)
23612 root.style.configure(
"Run.TButton", background=ButtonGreen, foreground=
"#000000", width=4, relief=ButRelief)
23613 root.style.configure(
"Pwr.TButton", background=ButtonGreen, foreground=
"#000000", width=8, relief=ButRelief)
23614 root.style.configure(
"PwrOff.TButton", background=ButtonRed, foreground=
"#000000", width=8, relief=ButRelief)
23615 root.style.configure(
"Roll.TButton", background=ButtonGreen, foreground=
"#000000", width=7, relief=ButRelief)
23616 root.style.configure(
"RollOff.TButton", background=ButtonRed, foreground=
"#000000", width=8, relief=ButRelief)
23617 root.style.configure(
"RConn.TButton", background=ButtonRed, foreground=
"#000000", width=5, relief=ButRelief)
23618 root.style.configure(
"GConn.TButton", background=ButtonGreen, foreground=
"#000000", width=5, relief=ButRelief)
23619 root.style.configure(
"Rtrace1.TButton", background=COLORtrace1, foreground=
"#000000", width=7, relief=RAISED)
23620 root.style.configure(
"Strace1.TButton", background=COLORtrace1, foreground=
"#000000", width=7, relief=SUNKEN)
23621 root.style.configure(
"Ctrace1.TButton", background=COLORtrace1, foreground=
"#000000", relief=ButRelief)
23622 root.style.configure(
"Rtrace2.TButton", background=COLORtrace2, foreground=
"#000000", width=7, relief=RAISED)
23623 root.style.configure(
"Strace2.TButton", background=COLORtrace2, foreground=
"#000000", width=7, relief=SUNKEN)
23624 root.style.configure(
"Ctrace2.TButton", background=COLORtrace2, foreground=
"#000000", relief=ButRelief)
23625 root.style.configure(
"Rtrace3.TButton", background=COLORtrace3, foreground=
"#000000", width=7, relief=RAISED)
23626 root.style.configure(
"Strace3.TButton", background=COLORtrace3, foreground=
"#000000", width=7, relief=SUNKEN)
23627 root.style.configure(
"Ctrace3.TButton", background=COLORtrace3, foreground=
"#000000", relief=ButRelief)
23628 root.style.configure(
"Rtrace4.TButton", background=COLORtrace4, foreground=
"#000000", width=7, relief=RAISED)
23629 root.style.configure(
"Strace4.TButton", background=COLORtrace4, foreground=
"#000000", width=7, relief=SUNKEN)
23630 root.style.configure(
"Ctrace4.TButton", background=COLORtrace4, foreground=
"#000000", relief=ButRelief)
23631 root.style.configure(
"Rtrace6.TButton", background=COLORtrace6, foreground=
"#000000", width=7, relief=RAISED)
23632 root.style.configure(
"Strace6.TButton", background=COLORtrace6, foreground=
"#000000", width=7, relief=SUNKEN)
23633 root.style.configure(
"Rtrace7.TButton", background=COLORtrace7, foreground=
"#000000", width=7, relief=RAISED)
23634 root.style.configure(
"Strace7.TButton", background=COLORtrace7, foreground=
"#000000", width=7, relief=SUNKEN)
23635 root.style.configure(
"RGray.TButton", background=
"#808080", width=7, relief=RAISED)
23636 root.style.configure(
"SGray.TButton", background=
"#808080", width=7, relief=SUNKEN)
23638 root.style.configure(
"A10T5.TLabelframe.Label", background=FrameBG, foreground=COLORtraceR5, font=(
'Arial', 10,
'bold'))
23639 root.style.configure(
"A10T5.TLabelframe", borderwidth=BorderSize, relief=FrameRefief)
23640 root.style.configure(
"A10T6.TLabelframe.Label", background=FrameBG, foreground=COLORtrace6, font=(
'Arial', 10,
'bold'))
23641 root.style.configure(
"A10T6.TLabelframe", borderwidth=BorderSize, relief=FrameRefief)
23642 root.style.configure(
"A10T7.TLabelframe.Label", background=FrameBG, foreground=COLORtrace7, font=(
'Arial', 10,
'bold'))
23643 root.style.configure(
"A10T7.TLabelframe", borderwidth=BorderSize, relief=FrameRefief)
23645 root.style.configure(
"A10R1.TLabelframe.Label", background=FrameBG, foreground=COLORtraceR1, font=(
'Arial', 10,
'bold'))
23646 root.style.configure(
"A10R1.TLabelframe", borderwidth=BorderSize, relief=FrameRefief)
23647 root.style.configure(
"A10R2.TLabelframe.Label", background=FrameBG, foreground=COLORtraceR2, font=(
'Arial', 10,
'bold'))
23648 root.style.configure(
"A10R2.TLabelframe", borderwidth=BorderSize, relief=FrameRefief)
23649 root.style.configure(
"A10.TLabelframe.Label", background=FrameBG, font=(
'Arial', 10,
'bold'))
23650 root.style.configure(
"A10.TLabelframe", borderwidth=BorderSize, relief=FrameRefief)
23651 root.style.configure(
"A10B.TLabel", foreground=ButtonText, font=
"Arial 10 bold")
23652 root.style.configure(
"A10R.TLabel", foreground=ButtonRed, font=
"Arial 10 bold")
23653 root.style.configure(
"A10G.TLabel", foreground=ButtonGreen, font=
"Arial 10 bold")
23654 root.style.configure(
"A12B.TLabel", foreground=ButtonText, font=
"Arial 12 bold")
23655 root.style.configure(
"A16B.TLabel", foreground=ButtonText, font=
"Arial 16 bold")
23656 root.style.configure(
"Stop.TRadiobutton", background=ButtonRed, indicatorcolor=FrameBG)
23657 root.style.configure(
"Run.TRadiobutton", background=ButtonGreen, indicatorcolor=FrameBG)
23658 root.style.configure(
"Disab.TCheckbutton", foreground=ButtonText, background=FrameBG, indicatorcolor=ButtonRed)
23659 root.style.configure(
"Enab.TCheckbutton", foreground=ButtonText, background=FrameBG, indicatorcolor=ButtonGreen)
23660 root.style.configure(
"Strace1.TCheckbutton", background=COLORtrace1, foreground=
"#000000", indicatorcolor=
"#ffffff")
23661 root.style.configure(
"Strace2.TCheckbutton", background=COLORtrace2, foreground=
"#000000", indicatorcolor=
"#ffffff")
23662 root.style.configure(
"Strace3.TCheckbutton", background=COLORtrace3, foreground=
"#000000", indicatorcolor=
"#ffffff")
23663 root.style.configure(
"Strace4.TCheckbutton", background=COLORtrace4, foreground=
"#000000", indicatorcolor=
"#ffffff")
23664 root.style.configure(
"Strace6.TCheckbutton", background=COLORtrace6, foreground=
"#000000", indicatorcolor=
"#ffffff")
23665 root.style.configure(
"Strace7.TCheckbutton", background=COLORtrace7, foreground=
"#000000", indicatorcolor=
"#ffffff")
23666 root.style.configure(
"WPhase.TRadiobutton", width=5, foreground=
"#000000", background=
"white", indicatorcolor=(
"red",
"green"))
23667 root.style.configure(
"GPhase.TRadiobutton", width=5, foreground=
"#000000", background=
"gray", indicatorcolor=(
"red",
"green"))
23669 frame2r = Frame(root, borderwidth=BorderSize, relief=FrameRefief)
23670 frame2r.pack(side=RIGHT, fill=BOTH, expand=NO)
23672 frame1 = Frame(root, borderwidth=BorderSize, relief=FrameRefief)
23673 frame1.pack(side=TOP, fill=BOTH, expand=NO)
23675 frame2 = Frame(root, borderwidth=BorderSize, relief=FrameRefief)
23676 frame2.pack(side=TOP, fill=BOTH, expand=YES)
23678 frame3 = Frame(root, borderwidth=BorderSize, relief=FrameRefief)
23679 frame3.pack(side=TOP, fill=BOTH, expand=NO)
23682 Triggermenu = Menubutton(frame1, text=
"Trigger", style=
"W7.TButton")
23683 Triggermenu.menu = Menu(Triggermenu, tearoff = 0 )
23684 Triggermenu[
"menu"] = Triggermenu.menu
23685 Triggermenu.menu.add_radiobutton(label=
'None', variable=TgInput, value=0)
23686 Triggermenu.menu.add_radiobutton(label=
'CA-V', variable=TgInput, value=1)
23687 Triggermenu.menu.add_radiobutton(label=
'CA-I', variable=TgInput, value=2)
23688 Triggermenu.menu.add_radiobutton(label=
'CB-V', variable=TgInput, value=3)
23689 Triggermenu.menu.add_radiobutton(label=
'CB-I', variable=TgInput, value=4)
23690 Triggermenu.menu.add_radiobutton(label=
'CA-V or CB-V', variable=TgInput, value=5)
23692 Triggermenu.menu.add_checkbutton(label=
'Auto Level', variable=AutoLevel)
23693 Triggermenu.menu.add_checkbutton(label=
'Low Pass Filter', variable=LPFTrigger)
23694 Triggermenu.menu.add_checkbutton(label=
'Manual Trgger', variable=ManualTrigger)
23695 Triggermenu.menu.add_checkbutton(label=
'SingleShot', variable=SingleShot)
23696 Triggermenu.pack(side=LEFT)
23698 Edgemenu = Menubutton(frame1, text=
"Edge", style=
"W5.TButton")
23699 Edgemenu.menu = Menu(Edgemenu, tearoff = 0 )
23700 Edgemenu[
"menu"] = Edgemenu.menu
23701 Edgemenu.menu.add_radiobutton(label=
'Rising (+)', variable=TgEdge, value=0)
23702 Edgemenu.menu.add_radiobutton(label=
'Falling (-)', variable=TgEdge, value=1)
23703 Edgemenu.pack(side=LEFT)
23705 tlab = Label(frame1, text=
"Trig Level")
23706 tlab.pack(side=LEFT)
23707 TRIGGERentry = Entry(frame1, width=5, cursor=
'double_arrow')
23708 TRIGGERentry.bind(
'<MouseWheel>', onTextScroll)
23709 TRIGGERentry.bind(
"<Button-4>", onTextScroll)
23710 TRIGGERentry.bind(
"<Button-5>", onTextScroll)
23711 TRIGGERentry.bind(
"<Return>", BTriglevel)
23712 TRIGGERentry.bind(
'<Key>', onTextKey)
23713 TRIGGERentry.pack(side=LEFT)
23714 TRIGGERentry.delete(0,
"end")
23715 TRIGGERentry.insert(0,0.0)
23717 tgb = Button(frame1, text=
"50%", style=
"W4.TButton", command=BTrigger50p)
23718 tgb.pack(side=LEFT)
23720 hldlab = Button(frame1, text=
"Hold Off", style=
"W8.TButton", command=IncHoldOff)
23721 hldlab.pack(side=LEFT)
23722 HoldOffentry = Entry(frame1, width=4, cursor=
'double_arrow')
23723 HoldOffentry.bind(
'<MouseWheel>', onTextScroll)
23724 HoldOffentry.bind(
"<Button-4>", onTextScroll)
23725 HoldOffentry.bind(
"<Button-5>", onTextScroll)
23726 HoldOffentry.bind(
"<Return>", BHoldOff)
23727 HoldOffentry.bind(
'<Key>', onTextKey)
23728 HoldOffentry.pack(side=LEFT)
23729 HoldOffentry.delete(0,
"end")
23730 HoldOffentry.insert(0,0.0)
23732 hozlab = Button(frame1, text=
"Horz Pos", style=
"W8.TButton", command=SetTriggerPoss)
23733 hozlab.pack(side=LEFT)
23734 HozPossentry = Entry(frame1, width=4, cursor=
'double_arrow')
23735 HozPossentry.bind(
'<MouseWheel>', onTextScroll)
23736 HozPossentry.bind(
"<Button-4>", onTextScroll)
23737 HozPossentry.bind(
"<Button-5>", onTextScroll)
23738 HozPossentry.bind(
"<Return>", BHozPoss)
23739 HozPossentry.bind(
'<Key>', onTextKey)
23740 HozPossentry.pack(side=LEFT)
23741 HozPossentry.delete(0,
"end")
23742 HozPossentry.insert(0,0.0)
23744 bexit = Button(frame1, text=
"Exit", style=
"W4.TButton", command=Bcloseexit)
23745 bexit.pack(side=RIGHT)
23746 bstop = Button(frame1, text=
"Stop", style=
"Stop.TButton", command=BStop)
23747 bstop.pack(side=RIGHT)
23748 brun = Button(frame1, text=
"Run", style=
"Run.TButton", command=BStart)
23749 brun.pack(side=RIGHT)
23750 PwrBt = Button(frame1, text=
"PWR-ON", style=
"Pwr.TButton", command=BPower)
23751 PwrBt.pack(side=RIGHT)
23753 if EnableScopeOnly == 0:
23754 Showmenu = Menubutton(frame1, text=
"Curves", style=
"W7.TButton")
23756 Showmenu = Menubutton(frame1, text=
"Traces", style=
"W7.TButton")
23757 Showmenu.menu = Menu(Showmenu, tearoff = 0 )
23758 Showmenu[
"menu"] = Showmenu.menu
23759 Showmenu.menu.add_command(label=
"-Show Traces-", foreground=
"blue", command=donothing)
23760 Showmenu.menu.add_command(label=
"All", command=BShowCurvesAll)
23761 Showmenu.menu.add_command(label=
"None", command=BShowCurvesNone)
23762 Showmenu.menu.add_checkbutton(label=
'CA-V (1)', background=COLORtrace1, variable=ShowC1_V, command=TraceSelectADC_Mux)
23763 Showmenu.menu.add_checkbutton(label=
'CA-I (3)', background=COLORtrace3, variable=ShowC1_I, command=TraceSelectADC_Mux)
23764 Showmenu.menu.add_checkbutton(label=
'CB-V (2)', background=COLORtrace2, variable=ShowC2_V, command=TraceSelectADC_Mux)
23765 Showmenu.menu.add_checkbutton(label=
'CB-I (4)', background=COLORtrace4,variable=ShowC2_I, command=TraceSelectADC_Mux)
23766 Showmenu.menu.add_checkbutton(label=
'Math-X', background=COLORtrace6, variable=Show_MathX, command=UpdateTimeTrace)
23767 Showmenu.menu.add_checkbutton(label=
'Math-Y', background=COLORtrace7, variable=Show_MathY, command=UpdateTimeTrace)
23768 Showmenu.menu.add_command(label=
"-Auto Vert Center-", foreground=
"blue", command=donothing)
23769 Showmenu.menu.add_checkbutton(label=
'Center CA-V', variable=AutoCenterA)
23770 Showmenu.menu.add_checkbutton(label=
'Center CB-V', variable=AutoCenterB)
23771 Showmenu.menu.add_command(label=
"-Input HP Comp-", foreground=
"blue", command=donothing)
23772 Showmenu.menu.add_checkbutton(label=
'Comp CA-V', variable=CHA_RC_HP)
23773 Showmenu.menu.add_checkbutton(label=
'Comp CB-V', variable=CHB_RC_HP)
23774 if EnableHSsampling > 0:
23775 Showmenu.menu.add_checkbutton(label=
'Comp CA-I', variable=CHAI_RC_HP)
23776 Showmenu.menu.add_checkbutton(label=
'Comp CB-I', variable=CHBI_RC_HP)
23777 Showmenu.menu.add_separator()
23778 Showmenu.menu.add_checkbutton(label=
'RA-V', background=COLORtraceR1, variable=ShowRA_V, command=UpdateTimeTrace)
23779 Showmenu.menu.add_checkbutton(label=
'RA-I', background=COLORtraceR3, variable=ShowRA_I, command=UpdateTimeTrace)
23780 Showmenu.menu.add_checkbutton(label=
'RB-V', background=COLORtraceR2, variable=ShowRB_V, command=UpdateTimeTrace)
23781 Showmenu.menu.add_checkbutton(label=
'RB-I', background=COLORtraceR4, variable=ShowRB_I, command=UpdateTimeTrace)
23782 Showmenu.menu.add_checkbutton(label=
'RMath', background=COLORtraceR5, variable=ShowMath, command=UpdateTimeTrace)
23783 Showmenu.menu.add_separator()
23784 Showmenu.menu.add_checkbutton(label=
'T Cursor (t)', variable=ShowTCur, command=UpdateTimeTrace)
23785 Showmenu.menu.add_checkbutton(label=
'V Cursor (v)', variable=ShowVCur, command=UpdateTimeTrace)
23786 Showmenu.pack(side=RIGHT)
23788 if ShowBallonHelp > 0:
23792 hldlab_tip =
CreateToolTip(hldlab,
'Increment Hold Off setting by one time division')
23793 hozlab_tip =
CreateToolTip(hozlab,
'When triggering, set trigger point to center of screen')
23801 if EnableHSsampling > 0:
23802 fminlab2 = Label(frame1, text=
"KHz")
23803 fminlab2.pack(side=RIGHT)
23804 FminEntry = Entry(frame1, width=6, cursor=
'double_arrow')
23805 FminEntry.bind(
'<MouseWheel>', onFminScroll)
23806 FminEntry.bind(
"<Button-4>", onFminScroll)
23807 FminEntry.bind(
"<Button-5>", onFminScroll)
23808 FminEntry.bind(
"<Return>", SetAD9833)
23809 FminEntry.pack(side=RIGHT)
23810 FminEntry.delete(0,
"end")
23811 FminEntry.insert(0,25)
23812 fminlab = Button(frame1, text=
"Fmin", style=
"W5.TButton", command=BSetFmin)
23813 fminlab.pack(side=RIGHT)
23815 HtMulEntry = Entry(frame1, width=4, cursor=
'double_arrow')
23816 HtMulEntry.bind(
'<MouseWheel>', onMulXScroll)
23817 HtMulEntry.bind(
"<Button-4>", onMulXScroll)
23818 HtMulEntry.bind(
"<Button-5>", onMulXScroll)
23819 HtMulEntry.bind(
"<Return>", SetAD9833)
23820 HtMulEntry.pack(side=RIGHT)
23821 HtMulEntry.delete(0,
"end")
23822 HtMulEntry.insert(0,1)
23823 mulxlab = Label( frame1, text =
"Mul X")
23824 mulxlab.pack(side=RIGHT)
23826 RollBt = Button(frame1, text=
"Roll-Off", style=
"RollOff.TButton", command=BRoll)
23827 RollBt.pack(side=RIGHT)
23830 TMsb = Spinbox(frame1, width=5, values= TMpdiv, cursor=
'double_arrow', command=BTime)
23831 TMsb.bind(
'<MouseWheel>', onSpinBoxScroll)
23832 TMsb.bind(
"<Button-4>", onSpinBoxScroll)
23833 TMsb.bind(
"<Button-5>", onSpinBoxScroll)
23834 TMsb.pack(side=RIGHT)
23835 TMsb.delete(0,
"end")
23837 TMlab = Label(frame1, text=
"Time mS/Div")
23838 TMlab.pack(side=RIGHT)
23840 ca = Canvas(frame2, width=CANVASwidth, height=CANVASheight, background=COLORcanvas, cursor=
'cross')
23842 ca.bind(
'<Configure>', CAresize)
23843 ca.bind(
'<1>', onCanvasClickLeft)
23844 ca.bind(
'<3>', onCanvasClickRight)
23845 ca.bind(
"<Motion>",onCanvasMouse_xy)
23846 ca.bind(
"<Up>", onCanvasUpArrow)
23847 ca.bind(
"<Down>", onCanvasDownArrow)
23848 ca.bind(
"<Left>", onCanvasLeftArrow)
23849 ca.bind(
"<Right>", onCanvasRightArrow)
23850 ca.bind(
"<space>", onCanvasSpaceBar)
23851 ca.bind(
"1", onCanvasOne)
23852 ca.bind(
"2", onCanvasTwo)
23853 ca.bind(
"3", onCanvasThree)
23854 ca.bind(
"4", onCanvasFour)
23855 ca.bind(
"5", onCanvasFive)
23856 ca.bind(
"6", onCanvasSix)
23857 ca.bind(
"7", onCanvasSeven)
23858 ca.bind(
"8", onCanvasEight)
23859 ca.bind(
"9", onCanvasNine)
23860 ca.bind(
"0", onCanvasZero)
23861 ca.bind(
"a", onCanvasAverage)
23862 ca.bind(
"t", onCanvasShowTcur)
23863 ca.bind(
"v", onCanvasShowVcur)
23864 ca.bind(
"s", onCanvasSnap)
23865 ca.bind(
"+", onCanvasTrising)
23866 ca.bind(
"-", onCanvasTfalling)
23867 ca.bind(
'<MouseWheel>', onCanvasClickScroll)
23868 ca.bind(
"<Button-4>", onCanvasClickScroll)
23869 ca.bind(
"<Button-5>", onCanvasClickScroll)
23870 ca.pack(side=TOP, fill=BOTH, expand=YES)
23873 dropmenu = Frame( frame2r )
23874 dropmenu.pack(side=TOP)
23875 bcon = Button(dropmenu, text=
"Recon", style=
"RConn.TButton", command=ConnectDevice)
23876 bcon.pack(side=LEFT, anchor=W)
23878 Filemenu = Menubutton(dropmenu, text=
"File", style=
"W4.TButton")
23879 Filemenu.menu = Menu(Filemenu, tearoff = 0 )
23880 Filemenu[
"menu"] = Filemenu.menu
23881 Filemenu.menu.add_command(label=
"Save Config", command=BSaveConfigTime)
23882 Filemenu.menu.add_command(label=
"Load Config", command=BLoadConfigTime)
23883 Filemenu.menu.add_command(label=
"Run Script", command=RunScript)
23884 Filemenu.menu.add_command(label=
"Save Adj", command=BSaveCal)
23885 Filemenu.menu.add_command(label=
"Load Adj", command=BLoadCal)
23886 Filemenu.menu.add_command(label=
"Save Screen", command=BSaveScreen)
23887 Filemenu.menu.add_command(label=
"Save To CSV", command=BSaveData)
23888 Filemenu.menu.add_command(label=
"Load From CSV", command=BReadData)
23889 Filemenu.menu.add_command(label=
"Save PWL Data", command=BSaveChannelData)
23890 Filemenu.menu.add_command(label=
"Help", command=BHelp)
23891 Filemenu.menu.add_command(label=
"About", command=BAbout)
23892 Filemenu.pack(side=LEFT, anchor=W)
23894 Optionmenu = Menubutton(dropmenu, text=
"Options", style=
"W7.TButton")
23895 Optionmenu.menu = Menu(Optionmenu, tearoff = 0 )
23896 Optionmenu[
"menu"] = Optionmenu.menu
23897 Optionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
23898 Optionmenu.menu.add_command(label=
'Set Sample Rate', command=MakeSampleRateMenu)
23899 Optionmenu.menu.add_checkbutton(label=
'Smooth', variable=SmoothCurves, command=UpdateTimeTrace)
23900 Optionmenu.menu.add_checkbutton(label=
'Z-O-Hold', variable=ZOHold, command=UpdateTimeTrace)
23901 Optionmenu.menu.add_checkbutton(label=
'Decimate', variable=DecimateOption)
23902 Optionmenu.menu.add_checkbutton(label=
'Gated Meas', variable=MeasGateStatus)
23903 Optionmenu.menu.add_checkbutton(label=
'Trace Avg (a)', variable=TRACEmodeTime)
23904 Optionmenu.menu.add_checkbutton(label=
'Persistance', variable=ScreenTrefresh)
23905 Optionmenu.menu.add_command(label=
'Set Marker Location', command=BSetMarkerLocation)
23906 Optionmenu.menu.add_command(label=
'Change Plot Label', command=BUserCustomPlotText)
23907 Optionmenu.menu.add_command(label=
"SnapShot (s)", command=BSnapShot)
23908 Optionmenu.menu.add_radiobutton(label=
'Black BG', variable=ColorMode, value=0, command=BgColor)
23909 Optionmenu.menu.add_radiobutton(label=
'White BG', variable=ColorMode, value=1, command=BgColor)
23910 Optionmenu.menu.add_command(label=
"Run Self Cal", command=SelfCalibration)
23911 if EnableScopeOnly != 0:
23912 Optionmenu.menu.add_command(label=
"Open Instruments", command=OpenOtherTools)
23913 if AllowFlashFirmware == 1:
23914 Optionmenu.menu.add_command(label=
"Save Cal Settings", command=Save_Cal_file)
23915 Optionmenu.menu.add_command(label=
"Update Firmware", command=UpdateFirmware)
23916 Optionmenu.pack(side=LEFT, anchor=W)
23918 dropmenu2 = Frame( frame2r )
23919 dropmenu2.pack(side=TOP)
23921 mathbt = Button(dropmenu2, text=
"Math", style=
"W4.TButton", command = NewEnterMathControls)
23922 mathbt.pack(side=RIGHT, anchor=W)
23924 measlab = Label(dropmenu2, text=
"Meas")
23925 measlab.pack(side=LEFT, anchor=W)
23926 MeasmenuA = Menubutton(dropmenu2, text=
"CA", style=
"W3.TButton")
23927 MeasmenuA.menu = Menu(MeasmenuA, tearoff = 0 )
23928 MeasmenuA[
"menu"] = MeasmenuA.menu
23929 MeasmenuA.menu.add_command(label=
"-CA-V-", foreground=
"blue", command=donothing)
23930 MeasmenuA.menu.add_checkbutton(label=
'Avg', variable=MeasDCV1)
23931 MeasmenuA.menu.add_checkbutton(label=
'Min', variable=MeasMinV1)
23932 MeasmenuA.menu.add_checkbutton(label=
'Max', variable=MeasMaxV1)
23933 MeasmenuA.menu.add_checkbutton(label=
'Base', variable=MeasBaseV1)
23934 MeasmenuA.menu.add_checkbutton(label=
'Top', variable=MeasTopV1)
23935 MeasmenuA.menu.add_checkbutton(label=
'Mid', variable=MeasMidV1)
23936 MeasmenuA.menu.add_checkbutton(label=
'P-P', variable=MeasPPV1)
23937 MeasmenuA.menu.add_checkbutton(label=
'RMS', variable=MeasRMSV1)
23938 MeasmenuA.menu.add_checkbutton(label=
'CA-CB', variable=MeasDiffAB)
23939 MeasmenuA.menu.add_checkbutton(label=
'CA-CB RMS', variable=MeasRMSVA_B)
23940 MeasmenuA.menu.add_checkbutton(label=
'User', variable=MeasUserA, command=BUserAMeas)
23942 MeasmenuA.menu.add_command(label=
"-CA-I-", foreground=
"blue", command=donothing)
23943 MeasmenuA.menu.add_checkbutton(label=
'Avg', variable=MeasDCI1)
23944 MeasmenuA.menu.add_checkbutton(label=
'Min', variable=MeasMinI1)
23945 MeasmenuA.menu.add_checkbutton(label=
'Max', variable=MeasMaxI1)
23946 MeasmenuA.menu.add_checkbutton(label=
'Mid', variable=MeasMidI1)
23947 MeasmenuA.menu.add_checkbutton(label=
'P-P', variable=MeasPPI1)
23948 MeasmenuA.menu.add_checkbutton(label=
'RMS', variable=MeasRMSI1)
23950 MeasmenuA.menu.add_command(label=
"-CA-Time-", foreground=
"blue", command=donothing)
23951 MeasmenuA.menu.add_checkbutton(label=
'H-Width', variable=MeasAHW)
23952 MeasmenuA.menu.add_checkbutton(label=
'L-Width', variable=MeasALW)
23953 MeasmenuA.menu.add_checkbutton(label=
'DutyCyle', variable=MeasADCy)
23954 MeasmenuA.menu.add_checkbutton(label=
'Period', variable=MeasAPER)
23955 MeasmenuA.menu.add_checkbutton(label=
'Freq', variable=MeasAFREQ)
23956 MeasmenuA.menu.add_checkbutton(label=
'A-B Phase', variable=MeasPhase)
23958 MeasmenuA.pack(side=LEFT)
23960 MeasmenuB = Menubutton(dropmenu2, text=
"CB", style=
"W3.TButton")
23961 MeasmenuB.menu = Menu(MeasmenuB, tearoff = 0 )
23962 MeasmenuB[
"menu"] = MeasmenuB.menu
23963 MeasmenuB.menu.add_command(label=
"-CB-V-", foreground=
"blue", command=donothing)
23964 MeasmenuB.menu.add_checkbutton(label=
'Avg', variable=MeasDCV2)
23965 MeasmenuB.menu.add_checkbutton(label=
'Min', variable=MeasMinV2)
23966 MeasmenuB.menu.add_checkbutton(label=
'Max', variable=MeasMaxV2)
23967 MeasmenuB.menu.add_checkbutton(label=
'Base', variable=MeasBaseV2)
23968 MeasmenuB.menu.add_checkbutton(label=
'Top', variable=MeasTopV2)
23969 MeasmenuB.menu.add_checkbutton(label=
'Mid', variable=MeasMidV2)
23970 MeasmenuB.menu.add_checkbutton(label=
'P-P', variable=MeasPPV2)
23971 MeasmenuB.menu.add_checkbutton(label=
'RMS', variable=MeasRMSV2)
23972 MeasmenuB.menu.add_checkbutton(label=
'CB-CA', variable=MeasDiffBA)
23973 MeasmenuB.menu.add_checkbutton(label=
'User', variable=MeasUserB, command=BUserBMeas)
23975 MeasmenuB.menu.add_command(label=
"-CB-I-", foreground=
"blue", command=donothing)
23976 MeasmenuB.menu.add_checkbutton(label=
'Avg', variable=MeasDCI2)
23977 MeasmenuB.menu.add_checkbutton(label=
'Min', variable=MeasMinI2)
23978 MeasmenuB.menu.add_checkbutton(label=
'Max', variable=MeasMaxI2)
23979 MeasmenuB.menu.add_checkbutton(label=
'Mid', variable=MeasMidI2)
23980 MeasmenuB.menu.add_checkbutton(label=
'P-P', variable=MeasPPI2)
23981 MeasmenuB.menu.add_checkbutton(label=
'RMS', variable=MeasRMSI2)
23983 MeasmenuB.menu.add_command(label=
"-CB-Time-", foreground=
"blue", command=donothing)
23984 MeasmenuB.menu.add_checkbutton(label=
'H-Width', variable=MeasBHW)
23985 MeasmenuB.menu.add_checkbutton(label=
'L-Width', variable=MeasBLW)
23986 MeasmenuB.menu.add_checkbutton(label=
'DutyCyle', variable=MeasBDCy)
23987 MeasmenuB.menu.add_checkbutton(label=
'Period', variable=MeasBPER)
23988 MeasmenuB.menu.add_checkbutton(label=
'Freq', variable=MeasBFREQ)
23989 MeasmenuB.menu.add_checkbutton(label=
'B-A Delay', variable=MeasDelay)
23990 MeasmenuB.pack(side=LEFT)
23991 if ShowBallonHelp > 0:
23996 DigScreenStatus = IntVar(0)
23997 DigScreenStatus.set(0)
23999 if EnableScopeOnly == 0:
24000 BuildAWGScreen = Button(frame2r, text=
"AWG Window", style=
"W16.TButton", command=MakeAWGWindow)
24001 BuildAWGScreen.pack(side=TOP)
24003 timebtn = Frame( frame2r )
24004 timebtn.pack(side=TOP)
24005 ckb1 = Checkbutton(timebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=TimeDisp, command=TimeCheckBox)
24006 ckb1.pack(side=LEFT)
24007 timelab = Label(timebtn, text=
"Time Plot")
24008 timelab.pack(side=LEFT)
24009 if EnableXYPlotter > 0:
24010 xybtn = Frame( frame2r )
24011 xybtn.pack(side=TOP)
24012 ckb2 = Checkbutton(xybtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=XYDisp, command=XYCheckBox)
24013 ckb2.pack(side=LEFT)
24014 BuildXYScreen = Button(xybtn, text=
"X-Y Plot", style=
"W11.TButton", command=MakeXYWindow)
24015 BuildXYScreen.pack(side=TOP)
24017 if EnablePhaseAnalizer > 0:
24018 phasebtn = Frame( frame2r )
24019 phasebtn.pack(side=TOP)
24020 phckb = Checkbutton(phasebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=PhADisp, command=PhACheckBox)
24021 phckb.pack(side=LEFT)
24022 BuildPhAScreen = Button(phasebtn, text=
"Phasor Plot", style=
"W11.TButton", command=MakePhAWindow)
24023 BuildPhAScreen.pack(side=LEFT)
24025 if EnableSpectrumAnalizer > 0:
24026 freqbtn = Frame( frame2r )
24027 freqbtn.pack(side=TOP)
24028 ckb3 = Checkbutton(freqbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=FreqDisp, command=FreqCheckBox)
24029 ckb3.pack(side=LEFT)
24030 BuildSpectrumScreen = Button(freqbtn, text=
"Spectrum Plot", style=
"W11.TButton", command=MakeSpectrumWindow)
24031 BuildSpectrumScreen.pack(side=LEFT)
24033 if EnableBodePlotter > 0:
24034 bodebtn = Frame( frame2r )
24035 bodebtn.pack(side=TOP)
24036 ckb5 = Checkbutton(bodebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=BodeDisp, command=BodeCheckBox)
24037 ckb5.pack(side=LEFT)
24038 BuildBodeScreen = Button(bodebtn, text=
"Bode Plot", style=
"W11.TButton", command=MakeBodeWindow)
24039 BuildBodeScreen.pack(side=LEFT)
24041 if EnableImpedanceAnalizer > 0:
24042 impdbtn = Frame( frame2r )
24043 impdbtn.pack(side=TOP)
24044 ckb4 = Checkbutton(impdbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=IADisp, command=IACheckBox)
24045 ckb4.pack(side=LEFT)
24046 BuildIAScreen = Button(impdbtn, text=
"Impedance", style=
"W11.TButton", command=MakeIAWindow)
24047 BuildIAScreen.pack(side=LEFT)
24049 if EnableOhmMeter > 0:
24050 dcohmbtn = Frame( frame2r )
24051 dcohmbtn.pack(side=TOP)
24052 ckb6 = Checkbutton(dcohmbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=OhmDisp, command=OhmCheckBox)
24053 ckb6.pack(side=LEFT)
24054 BuildOhmScreen = Button(dcohmbtn, text=
"Ohmmeter", style=
"W11.TButton", command=MakeOhmWindow)
24055 BuildOhmScreen.pack(side=LEFT)
24057 if ShowTraceControls > 0:
24058 Labelfonttext =
"Arial " + str(FontSize) +
" bold"
24059 tracelab = Label(frame2r, text=
"Traces", font= Labelfonttext)
24060 tracelab.pack(side=TOP)
24061 trctrla = Frame( frame2r )
24062 trctrla.pack(side=TOP)
24063 ckbt1 = Checkbutton(trctrla, text=
'CA-V (1)', style=
"Strace1.TCheckbutton", variable=ShowC1_V, command=TraceSelectADC_Mux)
24064 ckbt1.pack(side=LEFT,fill=X)
24065 ckbt2 = Checkbutton(trctrla, text=
'CA-I (3)', style=
"Strace3.TCheckbutton", variable=ShowC1_I, command=TraceSelectADC_Mux)
24066 ckbt2.pack(side=LEFT,fill=X)
24067 trctrlb = Frame( frame2r )
24068 trctrlb.pack(side=TOP)
24069 ckbt3 = Checkbutton(trctrlb, text=
'CB-V (2)', style=
"Strace2.TCheckbutton", variable=ShowC2_V, command=TraceSelectADC_Mux)
24070 ckbt3.pack(side=LEFT,fill=X)
24071 ckbt4 = Checkbutton(trctrlb, text=
'CB-I (4)', style=
"Strace4.TCheckbutton", variable=ShowC2_I, command=TraceSelectADC_Mux)
24072 ckbt4.pack(side=LEFT,fill=X)
24074 if ShowBallonHelp > 0:
24088 BuildSpectrumScreen_tip =
CreateToolTip(BuildSpectrumScreen,
'Open Spectrum Analyzer window')
24104 if EnableDigIO > 0:
24105 BuildDigScreen = Button(frame2r, text=
"Digital I/O Screen", style=
"W17.TButton", command=MakeDigScreen)
24106 BuildDigScreen.pack(side=TOP)
24108 if EnablePIODACMode > 0:
24109 BuildDacScreen = Button(frame2r, text=
"PIO-DAC Screen", style=
"W17.TButton", command=MakeDacScreen)
24110 BuildDacScreen.pack(side=TOP)
24111 if EnableMuxMode > 0:
24112 BuildMuxScreen = Button(frame2r, text=
"Analog In Mux Screen", style=
"W17.TButton", command=MakeMuxModeWindow)
24113 BuildMuxScreen.pack(side=TOP)
24114 if EnableMinigenMode > 0:
24115 BuildMinigenScreen = Button(frame2r, text=
"AD983x DDS Screen", style=
"W17.TButton", command=MakeMinigenWindow)
24116 BuildMinigenScreen.pack(side=TOP)
24117 if EnablePmodDA1Mode > 0:
24118 BuildDA1Screen = Button(frame2r, text=
"PMOD DA1 Screen", style=
"W17.TButton", command=MakeDA1Window)
24119 BuildDA1Screen.pack(side=TOP)
24120 if EnableDigPotMode >0:
24121 BuildDigPotScreen = Button(frame2r, text=
"Dig Pot Screen", style=
"W17.TButton", command=MakeDigPotWindow)
24122 BuildDigPotScreen.pack(side=TOP)
24123 if EnableGenericSerialMode >0:
24124 GenericSerialScreen = Button(frame2r, text=
"Generic Serial Output", style=
"W17.TButton", command=MakeGenericSerialWindow)
24125 GenericSerialScreen.pack(side=TOP)
24126 if EnableAD5626SerialMode >0:
24127 AD5626SerialScreen = Button(frame2r, text=
"AD5626 Output", style=
"W17.TButton", command=MakeAD5626Window)
24128 AD5626SerialScreen.pack(side=TOP)
24129 if EnableDigitalFilter >0:
24130 DigFiltScreen = Button(frame2r, text=
"Digital Filter", style=
"W17.TButton", command=MakeDigFiltWindow)
24131 DigFiltScreen.pack(side=TOP)
24132 if EnableCommandInterface > 0:
24133 CommandLineScreen = Button(frame2r, text=
"Command Interface", style=
"W17.TButton", command=MakeCommandScreen)
24134 CommandLineScreen.pack(side=TOP)
24135 if EnableMeasureScreen > 0:
24136 MeasureScreen = Button(frame2r, text=
"Measure Screen", style=
"W17.TButton", command=MakeMeasureScreen)
24137 MeasureScreen.pack(side=TOP)
24138 if EnableETSScreen > 0:
24139 ETSScreen = Button(frame2r, text=
"ETS Controls", style=
"W17.TButton", command=MakeETSWindow)
24140 ETSScreen.pack(side=TOP)
24143 if EnableXYPlotter > 0:
24144 xybtn = Frame( frame2r )
24145 xybtn.pack(side=TOP)
24146 ckb2 = Checkbutton(xybtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=XYDisp, command=XYCheckBox)
24147 ckb2.pack(side=LEFT)
24148 BuildXYScreen = Button(xybtn, text=
"X-Y Plot", style=
"W11.TButton", command=MakeXYWindow)
24149 BuildXYScreen.pack(side=TOP)
24151 if ShowTraceControls > 0:
24152 Labelfonttext =
"Arial " + str(FontSize) +
" bold"
24153 tracelab = Label(frame2r, text=
"Traces", font= Labelfonttext)
24154 tracelab.pack(side=TOP)
24155 trctrla = Frame( frame2r )
24156 trctrla.pack(side=TOP)
24157 ckbt1 = Checkbutton(trctrla, text=
'CA-V (1)', style=
"Strace1.TCheckbutton", variable=ShowC1_V, command=TraceSelectADC_Mux)
24158 ckbt1.pack(side=LEFT,fill=X)
24159 ckbt2 = Checkbutton(trctrla, text=
'CA-I (3)', style=
"Strace3.TCheckbutton", variable=ShowC1_I, command=TraceSelectADC_Mux)
24160 ckbt2.pack(side=LEFT,fill=X)
24161 trctrlb = Frame( frame2r )
24162 trctrlb.pack(side=TOP)
24163 ckbt3 = Checkbutton(trctrlb, text=
'CB-V (2)', style=
"Strace2.TCheckbutton", variable=ShowC2_V, command=TraceSelectADC_Mux)
24164 ckbt3.pack(side=LEFT,fill=X)
24165 ckbt4 = Checkbutton(trctrlb, text=
'CB-I (4)', style=
"Strace4.TCheckbutton", variable=ShowC2_I, command=TraceSelectADC_Mux)
24166 ckbt4.pack(side=LEFT,fill=X)
24168 awg1eb = Frame( frame2r )
24169 awg1eb.pack(side=TOP)
24170 ModeAMenu = Menubutton(awg1eb, text=
"Mode", width=5, style=
"Ctrace1.TButton")
24171 ModeAMenu.menu = Menu(ModeAMenu, tearoff = 0 )
24172 ModeAMenu[
"menu"] = ModeAMenu.menu
24173 ModeAMenu.menu.add_command(label=
"-Mode-", foreground=
"blue", command=donothing)
24174 ModeAMenu.menu.add_radiobutton(label=
"SVMI", variable=AWGAMode, value=0, command=BAWGAModeLabel)
24175 ModeAMenu.menu.add_radiobutton(label=
"SIMV", variable=AWGAMode, value=1, command=BAWGAModeLabel)
24176 ModeAMenu.menu.add_radiobutton(label=
"Hi-Z", variable=AWGAMode, value=2, command=BAWGAModeLabel)
24177 ModeAMenu.menu.add_checkbutton(label=
"Split I/O", variable=AWGAIOMode, command=BAWGAModeLabel)
24178 ModeAMenu.menu.add_separator()
24179 ModeAMenu.menu.add_command(label=
"-Term-", foreground=
"blue", command=donothing)
24180 ModeAMenu.menu.add_radiobutton(label=
"Open", variable=AWGATerm, value=0, command=UpdateAwgCont)
24181 ModeAMenu.menu.add_radiobutton(label=
"To GND", variable=AWGATerm, value=1, command=UpdateAwgCont)
24182 ModeAMenu.menu.add_radiobutton(label=
"To 2.5V", variable=AWGATerm, value=2, command=UpdateAwgCont)
24183 ModeAMenu.pack(side=LEFT, anchor=W)
24184 ShapeAMenu = Menubutton(awg1eb, text=
"Shape", width=6, style=
"Ctrace1.TButton")
24185 ShapeAMenu.menu = Menu(ShapeAMenu, tearoff = 0 )
24186 ShapeAMenu[
"menu"] = ShapeAMenu.menu
24187 ShapeAMenu.menu.add_command(label=
"-Basic-", foreground=
"blue", command=donothing)
24188 ShapeAMenu.menu.add_radiobutton(label=
"DC", variable=AWGAShape, value=0, command=ReMakeAWGwaves)
24189 ShapeAMenu.menu.add_radiobutton(label=
"Sine", variable=AWGAShape, value=18, command=ReMakeAWGwaves)
24190 ShapeAMenu.menu.add_radiobutton(label=
"Triangle", variable=AWGAShape, value=2, command=ReMakeAWGwaves)
24191 ShapeAMenu.menu.add_radiobutton(label=
"Sawtooth", variable=AWGAShape, value=3, command=ReMakeAWGwaves)
24192 ShapeAMenu.menu.add_radiobutton(label=
"Square", variable=AWGAShape, value=4, command=ReMakeAWGwaves)
24193 ShapeAMenu.menu.add_radiobutton(label=
"StairStep", variable=AWGAShape, value=5, command=ReMakeAWGwaves)
24194 if AWGShowAdvanced.get() > 0:
24195 ShapeAMenu.menu.add_command(label=
"-Advanced-", foreground=
"blue", command=donothing)
24196 ShapeAMenu.menu.add_radiobutton(label=
"Impulse", variable=AWGAShape, value=9, command=ReMakeAWGwaves)
24197 ShapeAMenu.menu.add_radiobutton(label=
"Trapezoid", variable=AWGAShape, value=11, command=ReMakeAWGwaves)
24198 ShapeAMenu.menu.add_radiobutton(label=
"Pulse", variable=AWGAShape, value=20, command=ReMakeAWGwaves)
24199 ShapeAMenu.menu.add_radiobutton(label=
"Ramp", variable=AWGAShape, value=16, command=ReMakeAWGwaves)
24200 ShapeAMenu.menu.add_radiobutton(label=
"SSQ Pulse", variable=AWGAShape, value=15, command=ReMakeAWGwaves)
24201 ShapeAMenu.menu.add_radiobutton(label=
"U-D Ramp", variable=AWGAShape, value=12, command=ReMakeAWGwaves)
24202 ShapeAMenu.menu.add_radiobutton(label=
"Fourier Series", variable=AWGAShape, value=14, command=AWGAMakeFourier)
24203 ShapeAMenu.menu.add_radiobutton(label=
"Sin X/X", variable=AWGAShape, value=19, command=ReMakeAWGwaves)
24204 ShapeAMenu.menu.add_radiobutton(label=
"PWM Sine", variable=AWGAShape, value=17, command=ReMakeAWGwaves)
24205 ShapeAMenu.menu.add_radiobutton(label=
"FM Sine", variable=AWGAShape, value=21, command=AWGAMakeFMSine)
24206 ShapeAMenu.menu.add_radiobutton(label=
"AM Sine", variable=AWGAShape, value=22, command=AWGAMakeAMSine)
24207 ShapeAMenu.menu.add_radiobutton(label=
"UU Noise", variable=AWGAShape, value=7, command=ReMakeAWGwaves)
24208 ShapeAMenu.menu.add_radiobutton(label=
"UG Noise", variable=AWGAShape, value=8, command=ReMakeAWGwaves)
24210 ShapeAMenu.menu.add_separator()
24211 ShapeAMenu.menu.add_radiobutton(label=
"Math", variable=AWGAShape, value=10, command=AWGAMakeMath)
24212 ShapeAMenu.menu.add_radiobutton(label=
"Read CSV File", variable=AWGAShape, value=6, command=AWGAReadFile)
24213 ShapeAMenu.menu.add_radiobutton(label=
"Read WAV File", variable=AWGAShape, value=13, command=AWGAReadWAV)
24214 ShapeAMenu.menu.add_command(label=
"Save CSV File", command=AWGAWriteFile)
24215 ShapeAMenu.menu.add_checkbutton(label=
'Burst', variable=AWGABurstFlag, command=AWGANumCycles)
24216 ShapeAMenu.menu.add_checkbutton(label=
'Repeat', variable=AWGARepeatFlag)
24217 ShapeAMenu.pack(side=LEFT, anchor=W)
24219 awg1model = Frame( frame2r )
24220 awg1model.pack(side=TOP,fill=X)
24221 AWGAModeLabel = Label(awg1model, text=
"AWG A Mode", background=COLORtrace1, font=(
'Arial', FontSize,
'bold'))
24222 AWGAModeLabel.pack(side=LEFT, fill=X)
24223 AWGAShapeLabel = Label(awg1model, text=
"AWG A Shape", background=COLORtrace1, font=(
'Arial', FontSize,
'bold'))
24224 AWGAShapeLabel.pack(side=LEFT, fill=X)
24226 awg1ampl = Frame( frame2r )
24227 awg1ampl.pack(side=TOP,fill=X)
24228 amp1lab = Label(awg1ampl)
24229 amp1lab.grid(row=0,column=0,sticky=E+S+N+W)
24230 off1lab = Label(awg1ampl)
24231 off1lab.grid(row=0,column=1,sticky=E+S+N+W)
24232 freq1lab = Label(awg1ampl, text=
"Freq")
24233 freq1lab.grid(row=0,column=2,sticky=E+S+N+W)
24235 AWGAAmplEntry = Entry(awg1ampl, width=5, cursor=
'double_arrow')
24236 AWGAAmplEntry.bind(
"<Return>", UpdateAwgContRet)
24237 AWGAAmplEntry.bind(
'<MouseWheel>', onAWGAscroll)
24238 AWGAAmplEntry.bind(
"<Button-4>", onAWGAscroll)
24239 AWGAAmplEntry.bind(
"<Button-5>", onAWGAscroll)
24240 AWGAAmplEntry.bind(
'<Key>', onTextKeyAWG)
24241 AWGAAmplEntry.grid(row=1,column=0,sticky=E+S+N+W)
24242 AWGAAmplEntry.delete(0,
"end")
24243 AWGAAmplEntry.insert(0,0.0)
24245 AWGAOffsetEntry = Entry(awg1ampl, width=5, cursor=
'double_arrow')
24246 AWGAOffsetEntry.bind(
"<Return>", UpdateAwgContRet)
24247 AWGAOffsetEntry.bind(
'<MouseWheel>', onAWGAscroll)
24248 AWGAOffsetEntry.bind(
"<Button-4>", onAWGAscroll)
24249 AWGAOffsetEntry.bind(
"<Button-5>", onAWGAscroll)
24250 AWGAOffsetEntry.bind(
'<Key>', onTextKeyAWG)
24251 AWGAOffsetEntry.grid(row=1,column=1,sticky=E+S+N+W)
24252 AWGAOffsetEntry.delete(0,
"end")
24253 AWGAOffsetEntry.insert(0,0.0)
24255 if AWG_Amp_Mode.get() == 0:
24256 amp1lab.config(text =
"Min" )
24257 off1lab.config(text =
"Max" )
24259 amp1lab.config(text =
"Amp" )
24260 off1lab.config(text =
"Off" )
24262 AWGAFreqEntry = Entry(awg1ampl, width=7, cursor=
'double_arrow')
24263 AWGAFreqEntry.bind(
"<Return>", UpdateAwgContRet)
24264 AWGAFreqEntry.bind(
'<MouseWheel>', onAWGAscroll)
24265 AWGAFreqEntry.bind(
"<Button-4>", onAWGAscroll)
24266 AWGAFreqEntry.bind(
"<Button-5>", onAWGAscroll)
24267 AWGAFreqEntry.bind(
'<Key>', onTextKeyAWG)
24268 AWGAFreqEntry.grid(row=1,column=2,sticky=E+S+N+W)
24269 AWGAFreqEntry.delete(0,
"end")
24270 AWGAFreqEntry.insert(0,100.0)
24273 awg1phase = Frame( frame2r )
24274 awg1phase.pack(side=TOP)
24275 awgaph = Button(awg1phase, text=
"Phase", style=
"W5.TButton", command=ToggleAWGAPhaseDelay)
24276 awgaph.pack(side=LEFT, anchor=W)
24277 AWGAPhaseEntry = Entry(awg1phase, width=4, cursor=
'double_arrow')
24278 AWGAPhaseEntry.bind(
"<Return>", UpdateAwgContRet)
24279 AWGAPhaseEntry.bind(
'<MouseWheel>', onAWGAscroll)
24280 AWGAPhaseEntry.bind(
"<Button-4>", onAWGAscroll)
24281 AWGAPhaseEntry.bind(
"<Button-5>", onAWGAscroll)
24282 AWGAPhaseEntry.bind(
'<Key>', onTextKeyAWG)
24283 AWGAPhaseEntry.pack(side=LEFT, anchor=W)
24284 AWGAPhaseEntry.delete(0,
"end")
24285 AWGAPhaseEntry.insert(0,0)
24286 phasealab = Label(awg1phase, text=
"Deg")
24287 phasealab.pack(side=LEFT, anchor=W)
24289 awg1dc = Frame( frame2r )
24290 awg1dc.pack(side=TOP)
24291 AWGADutyCycleEntry = Entry(awg1dc, width=5, cursor=
'double_arrow')
24292 AWGADutyCycleEntry.bind(
"<Return>", UpdateAwgContRet)
24293 AWGADutyCycleEntry.bind(
'<MouseWheel>', onAWGAscroll)
24294 AWGADutyCycleEntry.bind(
"<Button-4>", onAWGAscroll)
24295 AWGADutyCycleEntry.bind(
"<Button-5>", onAWGAscroll)
24296 AWGADutyCycleEntry.bind(
'<Key>', onTextKeyAWG)
24297 AWGADutyCycleEntry.pack(side=LEFT, anchor=W)
24298 AWGADutyCycleEntry.delete(0,
"end")
24299 AWGADutyCycleEntry.insert(0,50)
24300 duty1lab = Label(awg1dc, text=
"%")
24301 duty1lab.pack(side=LEFT, anchor=W)
24315 awg2eb = Frame( frame2r )
24316 awg2eb.pack(side=TOP)
24317 ModeBMenu = Menubutton(awg2eb, text=
"Mode", width=5, style=
"Ctrace2.TButton")
24318 ModeBMenu.menu = Menu(ModeBMenu, tearoff = 0 )
24319 ModeBMenu[
"menu"] = ModeBMenu.menu
24320 ModeBMenu.menu.add_command(label=
"-Mode-", foreground=
"blue", command=donothing)
24321 ModeBMenu.menu.add_radiobutton(label=
"SVMI", variable=AWGBMode, value=0, command=BAWGBModeLabel)
24322 ModeBMenu.menu.add_radiobutton(label=
"SIMV", variable=AWGBMode, value=1, command=BAWGBModeLabel)
24323 ModeBMenu.menu.add_radiobutton(label=
"Hi-Z", variable=AWGBMode, value=2, command=BAWGBModeLabel)
24324 ModeBMenu.menu.add_checkbutton(label=
"Split I/O", variable=AWGBIOMode, command=BAWGBModeLabel)
24325 ModeBMenu.menu.add_separator()
24326 ModeBMenu.menu.add_command(label=
"-Term-", foreground=
"blue", command=donothing)
24327 ModeBMenu.menu.add_radiobutton(label=
"Open", variable=AWGBTerm, value=0, command=UpdateAwgCont)
24328 ModeBMenu.menu.add_radiobutton(label=
"To GND", variable=AWGBTerm, value=1, command=UpdateAwgCont)
24329 ModeBMenu.menu.add_radiobutton(label=
"To 2.5V", variable=AWGBTerm, value=2, command=UpdateAwgCont)
24330 ModeBMenu.pack(side=LEFT, anchor=W)
24331 ShapeBMenu = Menubutton(awg2eb, text=
"Shape", width=6, style=
"Ctrace2.TButton")
24332 ShapeBMenu.menu = Menu(ShapeBMenu, tearoff = 0 )
24333 ShapeBMenu[
"menu"] = ShapeBMenu.menu
24334 ShapeBMenu.menu.add_command(label=
"-Basic-", foreground=
"blue", command=donothing)
24335 ShapeBMenu.menu.add_radiobutton(label=
"DC", variable=AWGBShape, value=0, command=ReMakeAWGwaves)
24336 ShapeBMenu.menu.add_radiobutton(label=
"Sine", variable=AWGBShape, value=18, command=ReMakeAWGwaves)
24337 ShapeBMenu.menu.add_radiobutton(label=
"Triangle", variable=AWGBShape, value=2, command=ReMakeAWGwaves)
24338 ShapeBMenu.menu.add_radiobutton(label=
"Sawtooth", variable=AWGBShape, value=3, command=ReMakeAWGwaves)
24339 ShapeBMenu.menu.add_radiobutton(label=
"Square", variable=AWGBShape, value=4, command=ReMakeAWGwaves)
24340 ShapeBMenu.menu.add_radiobutton(label=
"StairStep", variable=AWGBShape, value=5, command=ReMakeAWGwaves)
24341 if AWGShowAdvanced.get() > 0:
24342 ShapeBMenu.menu.add_command(label=
"-Advanced-", foreground=
"blue", command=donothing)
24343 ShapeBMenu.menu.add_radiobutton(label=
"Impulse", variable=AWGBShape, value=9, command=ReMakeAWGwaves)
24344 ShapeBMenu.menu.add_radiobutton(label=
"Trapezoid", variable=AWGBShape, value=11, command=ReMakeAWGwaves)
24345 ShapeBMenu.menu.add_radiobutton(label=
"Pulse", variable=AWGBShape, value=20, command=ReMakeAWGwaves)
24346 ShapeBMenu.menu.add_radiobutton(label=
"Ramp", variable=AWGBShape, value=16, command=ReMakeAWGwaves)
24347 ShapeBMenu.menu.add_radiobutton(label=
"SSQ Pulse", variable=AWGBShape, value=15, command=ReMakeAWGwaves)
24348 ShapeBMenu.menu.add_radiobutton(label=
"U-D Ramp", variable=AWGBShape, value=12, command=ReMakeAWGwaves)
24349 ShapeBMenu.menu.add_radiobutton(label=
"Fourier Series", variable=AWGBShape, value=14, command=AWGBMakeFourier)
24350 ShapeBMenu.menu.add_radiobutton(label=
"Sin X/X", variable=AWGBShape, value=19, command=ReMakeAWGwaves)
24351 ShapeBMenu.menu.add_radiobutton(label=
"PWM Sine", variable=AWGBShape, value=17, command=ReMakeAWGwaves)
24352 ShapeBMenu.menu.add_radiobutton(label=
"UU Noise", variable=AWGBShape, value=7, command=ReMakeAWGwaves)
24353 ShapeBMenu.menu.add_radiobutton(label=
"UG Noise", variable=AWGBShape, value=8, command=ReMakeAWGwaves)
24355 ShapeBMenu.menu.add_separator()
24356 ShapeBMenu.menu.add_radiobutton(label=
"Math", variable=AWGBShape, value=10, command=AWGBMakeMath)
24357 ShapeBMenu.menu.add_radiobutton(label=
"Read CSV File", variable=AWGBShape, value=6, command=AWGBReadFile)
24358 ShapeBMenu.menu.add_radiobutton(label=
"Read WAV File", variable=AWGBShape, value=13, command=AWGBReadWAV)
24359 ShapeBMenu.menu.add_command(label=
"Save CSV File", command=AWGBWriteFile)
24360 ShapeBMenu.menu.add_checkbutton(label=
'Burst', variable=AWGBBurstFlag, command=AWGBNumCycles)
24361 ShapeBMenu.menu.add_checkbutton(label=
'Repeat', variable=AWGBRepeatFlag)
24362 ShapeBMenu.pack(side=LEFT, anchor=W)
24364 awg2model = Frame( frame2r )
24365 awg2model.pack(side=TOP,fill=X)
24366 AWGBModeLabel = Label(awg2model, text=
"AWG B Mode", background=COLORtrace2, font=(
'Arial', FontSize,
'bold'))
24367 AWGBModeLabel.pack(side=LEFT, fill=X)
24368 AWGBShapeLabel = Label(awg2model, text=
"AWG B Shape", background=COLORtrace2, font=(
'Arial', FontSize,
'bold'))
24369 AWGBShapeLabel.pack(side=LEFT, fill=X)
24371 awg2ampl = Frame( frame2r )
24372 awg2ampl.pack(side=TOP)
24373 amp2lab = Label(awg2ampl)
24374 amp2lab.grid(row=0,column=0,sticky=E+S+N+W)
24376 off2lab = Label(awg2ampl)
24377 off2lab.grid(row=0,column=1,sticky=E+S+N+W)
24379 freq2lab = Label(awg2ampl, text=
"Freq")
24380 freq2lab.grid(row=0,column=2,sticky=E+S+N+W)
24383 AWGBAmplEntry = Entry(awg2ampl, width=5, cursor=
'double_arrow')
24384 AWGBAmplEntry.bind(
"<Return>", UpdateAwgContRet)
24385 AWGBAmplEntry.bind(
'<MouseWheel>', onAWGBscroll)
24386 AWGBAmplEntry.bind(
"<Button-4>", onAWGBscroll)
24387 AWGBAmplEntry.bind(
"<Button-5>", onAWGBscroll)
24388 AWGBAmplEntry.bind(
'<Key>', onTextKeyAWG)
24389 AWGBAmplEntry.grid(row=1,column=0,sticky=E+S+N+W)
24390 AWGBAmplEntry.delete(0,
"end")
24391 AWGBAmplEntry.insert(0,0.0)
24393 AWGBOffsetEntry = Entry(awg2ampl, width=5, cursor=
'double_arrow')
24394 AWGBOffsetEntry.bind(
"<Return>", UpdateAwgContRet)
24395 AWGBOffsetEntry.bind(
'<MouseWheel>', onAWGBscroll)
24396 AWGBOffsetEntry.bind(
"<Button-4>", onAWGBscroll)
24397 AWGBOffsetEntry.bind(
"<Button-5>", onAWGBscroll)
24398 AWGBOffsetEntry.bind(
'<Key>', onTextKeyAWG)
24399 AWGBOffsetEntry.grid(row=1,column=1,sticky=E+S+N+W)
24400 AWGBOffsetEntry.delete(0,
"end")
24401 AWGBOffsetEntry.insert(0,0.0)
24403 if AWG_Amp_Mode.get() == 0:
24404 amp2lab.config(text =
"Min" )
24405 off2lab.config(text =
"Max" )
24407 amp2lab.config(text =
"Amp" )
24408 off2lab.config(text =
"Off" )
24410 AWGBFreqEntry = Entry(awg2ampl, width=7, cursor=
'double_arrow')
24411 AWGBFreqEntry.bind(
"<Return>", UpdateAwgContRet)
24412 AWGBFreqEntry.bind(
'<MouseWheel>', onAWGBscroll)
24413 AWGBFreqEntry.bind(
"<Button-4>", onAWGBscroll)
24414 AWGBFreqEntry.bind(
"<Button-5>", onAWGBscroll)
24415 AWGBFreqEntry.bind(
'<Key>', onTextKeyAWG)
24416 AWGBFreqEntry.grid(row=1,column=2,sticky=E+S+N+W)
24417 AWGBFreqEntry.delete(0,
"end")
24418 AWGBFreqEntry.insert(0,100.0)
24421 awg2phase = Frame( frame2r )
24422 awg2phase.pack(side=TOP)
24423 awgbph = Button(awg2phase, text=
"Phase", style=
"W5.TButton", command=ToggleAWGBPhaseDelay)
24424 awgbph.pack(side=LEFT, anchor=W)
24425 AWGBPhaseEntry = Entry(awg2phase, width=5, cursor=
'double_arrow')
24426 AWGBPhaseEntry.bind(
"<Return>", UpdateAwgContRet)
24427 AWGBPhaseEntry.bind(
'<MouseWheel>', onAWGBscroll)
24428 AWGBPhaseEntry.bind(
"<Button-4>", onAWGBscroll)
24429 AWGBPhaseEntry.bind(
"<Button-5>", onAWGBscroll)
24430 AWGBPhaseEntry.bind(
'<Key>', onTextKeyAWG)
24431 AWGBPhaseEntry.pack(side=LEFT, anchor=W)
24432 AWGBPhaseEntry.delete(0,
"end")
24433 AWGBPhaseEntry.insert(0,0)
24434 phaseblab = Label(awg2phase, text=
"Deg")
24435 phaseblab.pack(side=LEFT, anchor=W)
24437 awg2dc = Frame( frame2r )
24438 awg2dc.pack(side=TOP)
24439 AWGBDutyCycleEntry = Entry(awg2dc, width=5, cursor=
'double_arrow')
24440 AWGBDutyCycleEntry.bind(
"<Return>", UpdateAwgContRet)
24441 AWGBDutyCycleEntry.bind(
'<MouseWheel>', onAWGBscroll)
24442 AWGBDutyCycleEntry.bind(
"<Button-4>", onAWGBscroll)
24443 AWGBDutyCycleEntry.bind(
"<Button-5>", onAWGBscroll)
24444 AWGBDutyCycleEntry.bind(
'<Key>', onTextKeyAWG)
24445 AWGBDutyCycleEntry.pack(side=LEFT, anchor=W)
24446 AWGBDutyCycleEntry.delete(0,
"end")
24447 AWGBDutyCycleEntry.insert(0,50)
24448 duty2lab = Label(awg2dc, text=
"%")
24449 duty2lab.pack(side=LEFT, anchor=W)
24451 bcompa = Checkbutton(frame2r, text=
"B = Comp A", variable=BisCompA, command=ReMakeAWGwaves)
24452 bcompa.pack(side=TOP)
24454 awgsync = Checkbutton(frame2r, text=
"Sync AWG", variable=AWGSync, command=BAWGSync)
24455 awgsync.pack(side=TOP)
24456 if ShowBallonHelp > 0:
24459 BuildAWGSync_tip =
CreateToolTip(awgsync,
'Toggle between continuous and discontinuous modes')
24467 prlab = Label(frame2r, text=
"Adjust Gain / Offset")
24468 prlab.pack(side=TOP)
24470 ProbeA = Frame( frame2r )
24471 ProbeA.pack(side=TOP)
24472 gain1lab = Button(ProbeA, text=
"CA-V", width=4, style=
"Ctrace1.TButton", command=ReSetAGO)
24473 gain1lab.pack(side=LEFT,fill=X)
24474 CHAVGainEntry = Entry(ProbeA, width=5, cursor=
'double_arrow')
24475 CHAVGainEntry.bind(
'<Return>', onTextKey)
24476 CHAVGainEntry.bind(
'<MouseWheel>', onTextScroll)
24477 CHAVGainEntry.bind(
"<Button-4>", onTextScroll)
24478 CHAVGainEntry.bind(
"<Button-5>", onTextScroll)
24479 CHAVGainEntry.bind(
'<Key>', onTextKey)
24480 CHAVGainEntry.pack(side=LEFT)
24481 CHAVGainEntry.delete(0,
"end")
24482 CHAVGainEntry.insert(0,1.0)
24483 CHAVOffsetEntry = Entry(ProbeA, width=5, cursor=
'double_arrow')
24484 CHAVOffsetEntry.bind(
'<Return>', onTextKey)
24485 CHAVOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
24486 CHAVOffsetEntry.bind(
"<Button-4>", onTextScroll)
24487 CHAVOffsetEntry.bind(
"<Button-5>", onTextScroll)
24488 CHAVOffsetEntry.bind(
'<Key>', onTextKey)
24489 CHAVOffsetEntry.pack(side=LEFT)
24490 CHAVOffsetEntry.delete(0,
"end")
24491 CHAVOffsetEntry.insert(0,0.0)
24493 ProbeB = Frame( frame2r )
24494 ProbeB.pack(side=TOP)
24495 gain2lab = Button(ProbeB, text=
"CB-V", width=4, style=
"Ctrace2.TButton", command=ReSetBGO)
24496 gain2lab.pack(side=LEFT,fill=X)
24497 CHBVGainEntry = Entry(ProbeB, width=5, cursor=
'double_arrow')
24498 CHBVGainEntry.bind(
'<Return>', onTextKey)
24499 CHBVGainEntry.bind(
'<MouseWheel>', onTextScroll)
24500 CHBVGainEntry.bind(
"<Button-4>", onTextScroll)
24501 CHBVGainEntry.bind(
"<Button-5>", onTextScroll)
24502 CHBVGainEntry.bind(
'<Key>', onTextKey)
24503 CHBVGainEntry.pack(side=LEFT)
24504 CHBVGainEntry.delete(0,
"end")
24505 CHBVGainEntry.insert(0,1.0)
24506 CHBVOffsetEntry = Entry(ProbeB, width=5, cursor=
'double_arrow')
24507 CHBVOffsetEntry.bind(
'<Return>', onTextKey)
24508 CHBVOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
24509 CHBVOffsetEntry.bind(
"<Button-4>", onTextScroll)
24510 CHBVOffsetEntry.bind(
"<Button-5>", onTextScroll)
24511 CHBVOffsetEntry.bind(
'<Key>', onTextKey)
24512 CHBVOffsetEntry.pack(side=LEFT)
24513 CHBVOffsetEntry.delete(0,
"end")
24514 CHBVOffsetEntry.insert(0,0.0)
24516 ProbeAI = Frame( frame2r )
24517 ProbeAI.pack(side=TOP)
24518 gainailab = Button(ProbeAI, text=
"CA-I", width=4, style=
"Ctrace3.TButton", command=ReSetAIGO)
24519 gainailab.pack(side=LEFT,fill=X)
24520 CHAIGainEntry = Entry(ProbeAI, width=5, cursor=
'double_arrow')
24521 CHAIGainEntry.bind(
'<Return>', onTextKey)
24522 CHAIGainEntry.bind(
'<MouseWheel>', onTextScroll)
24523 CHAIGainEntry.bind(
"<Button-4>", onTextScroll)
24524 CHAIGainEntry.bind(
"<Button-5>", onTextScroll)
24525 CHAIGainEntry.bind(
'<Key>', onTextKey)
24526 CHAIGainEntry.pack(side=LEFT)
24527 CHAIGainEntry.delete(0,
"end")
24528 CHAIGainEntry.insert(0,1.0)
24529 CHAIOffsetEntry = Entry(ProbeAI, width=5, cursor=
'double_arrow')
24530 CHAIOffsetEntry.bind(
'<Return>', onTextKey)
24531 CHAIOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
24532 CHAIOffsetEntry.bind(
"<Button-4>", onTextScroll)
24533 CHAIOffsetEntry.bind(
"<Button-5>", onTextScroll)
24534 CHAIOffsetEntry.bind(
'<Key>', onTextKey)
24535 CHAIOffsetEntry.pack(side=LEFT)
24536 CHAIOffsetEntry.delete(0,
"end")
24537 CHAIOffsetEntry.insert(0,0.0)
24539 ProbeBI = Frame( frame2r )
24540 ProbeBI.pack(side=TOP)
24541 gainbilab = Button(ProbeBI, text=
"CB-I", width=4, style=
"Ctrace4.TButton", command=ReSetBIGO)
24542 gainbilab.pack(side=LEFT,fill=X)
24543 CHBIGainEntry = Entry(ProbeBI, width=5, cursor=
'double_arrow')
24544 CHBIGainEntry.bind(
'<Return>', onTextKey)
24545 CHBIGainEntry.bind(
'<MouseWheel>', onTextScroll)
24546 CHBIGainEntry.bind(
"<Button-4>", onTextScroll)
24547 CHBIGainEntry.bind(
"<Button-5>", onTextScroll)
24548 CHBIGainEntry.bind(
'<Key>', onTextKey)
24549 CHBIGainEntry.pack(side=LEFT)
24550 CHBIGainEntry.delete(0,
"end")
24551 CHBIGainEntry.insert(0,1.0)
24552 CHBIOffsetEntry = Entry(ProbeBI, width=5, cursor=
'double_arrow')
24553 CHBIOffsetEntry.bind(
'<Return>', onTextKey)
24554 CHBIOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
24555 CHBIOffsetEntry.bind(
"<Button-4>", onTextScroll)
24556 CHBIOffsetEntry.bind(
"<Button-5>", onTextScroll)
24557 CHBIOffsetEntry.bind(
'<Key>', onTextKey)
24558 CHBIOffsetEntry.pack(side=LEFT)
24559 CHBIOffsetEntry.delete(0,
"end")
24560 CHBIOffsetEntry.insert(0,0.0)
24562 if EnableUserEntries > 0:
24563 UserEnt = Frame( frame2r )
24564 UserEnt.pack(side=TOP)
24565 userentlab = Button(UserEnt, text=
"User", width=4, style=
"W4.TButton")
24566 userentlab.pack(side=LEFT,fill=X)
24567 User1Entry = Entry(UserEnt, width=5, cursor=
'double_arrow')
24568 User1Entry.bind(
'<Return>', onTextKey)
24569 User1Entry.bind(
'<MouseWheel>', onTextScroll)
24570 User1Entry.bind(
"<Button-4>", onTextScroll)
24571 User1Entry.bind(
"<Button-5>", onTextScroll)
24572 User1Entry.bind(
'<Key>', onTextKey)
24573 User1Entry.pack(side=LEFT)
24574 User1Entry.delete(0,
"end")
24575 User1Entry.insert(0,0.0)
24576 User2Entry = Entry(UserEnt, width=5, cursor=
'double_arrow')
24577 User2Entry.bind(
'<Return>', onTextKey)
24578 User2Entry.bind(
'<MouseWheel>', onTextScroll)
24579 User2Entry.bind(
"<Button-4>", onTextScroll)
24580 User2Entry.bind(
"<Button-5>", onTextScroll)
24581 User2Entry.bind(
'<Key>', onTextKey)
24582 User2Entry.pack(side=LEFT)
24583 User2Entry.delete(0,
"end")
24584 User2Entry.insert(0,0.0)
24587 R0lGODlhdAAxAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/
24588 /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
24589 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm
24590 AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/
24591 MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm
24592 ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/
24593 mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm
24594 zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/
24595 /5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ
24596 AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA
24597 M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ
24598 ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A
24599 mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z
24600 zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAB0ADEA
24601 AAj/AP8JHEiwoMGDCBMqXMiwocOHEBlSS5WKIUWJfqj9S+XnokGPEUOKdEito0WNCC9OpEbtz7+V
24602 HyuOnEnzI6yMEylWpNgx50aOGkt6LElUoB9VPFHyTAXrYipVNaOSTOWzEEuqA61SXTnxH06ZK7EK
24603 5Ap2J9WdKKWqRVjyJ1c/1ZbqvPnyrKqS215mzEiwo8yfer22XUs4Zse9V31mPFuxbdKxjAU65Si5
24604 8Vm+hTNXrvuWKFKdjs8WJEqR5V63bkP/1bx28E+rK28ihckRayHQnH/yVdUTMtB/1fywHj7TI0iR
24605 x4krd7g0bcjSy6NLn069uvXr2LNr3/6Sip/vU777//EOXjx5P+G/nw/vnCA18gXFOy+JWfL31V6/
24606 s001ZQqK8AdN1B8KJiVETX9TMIGggv0xmOCCEDbYX3sDoTdhXwi6199qFjJRUIMB3iEhgs7x56CC
24607 wrH134r+tcjiiy7G+B+FL7nIYYsp1ojCX9SwuFqLBh343xQc+bGiUjhyhCNbLTbR4oBTODlkk09S
24608 iQKNBz7Z139OotQjkQPxx2WO/3D5kZNUDDSRk8IJOUVabqoo45ww1tkijejt+N9fUM64kX9/GQne
24609 lQMBWdCRGs6Yyp4FFYllhIVM6aCkCFL65kGAHshEjhZa2NiGAlWzJzUK8pngaAmSKVAh/fHWX0Rf
24610 sv+oSnB01iprkIwOWKF//wzIEqBG8drrf4USS9CiYBYEy39/GCrQHzpZFWCVhOoFpZSVRkktheg1
24611 MRaoXhGLbEaM9tpEinmiNGSj4CaaipNTqKltuaPBOF+ftt6JKgpUnGUoFcIaGR6wX371X4rOjnXw
24612 R3tSYexLL+L37YgUmhjhgxSjijHGGln4rYMVoXdihr2eqiETdxhEooUUtuuevQEiayeL7eU5p3B5
24613 ZmXjsHRWlLBAWgA7ULME/rPsqxjuOC2X/tE4VrfUztuef6oCKXDSRBb8MoBc6gSalD1BDVW4E5rW
24614 osQQx+i0mgLbOd/CSWeJwtY7pvvhjLWmDWOOJc3/jHaWHDckd4TOsawxePEeuyGJ7O44opbWDukH
24615 LB8hOGFtAcI4dkNEx7g5d+6xtBBLa8s7ZbUk/XF66aBLFau+D/GntntbwdQo6bXnHmTu83FFO+6k
24616 wxm8QoAzyDrbI186UPIF/vk4in6UStA2DKaC4q4OKp98qsFmnPnsC21jM8zF3izZzB1RTRDRfrBa
24617 dMl1alSrcPgOmVeQVpYuYNRSOtf/RFDbSaaCJzop9cVJFOkPzs6mF3iVjEheo0qzmvAHpcCtXuA7
24618 iJjy5ZyE2Wwi9IpPub4ULzFlhIFP25P6DCKwzQlJVRML3EEstDFLOYdBH7qcyxQ3hUJIJkE7ORip
24619 /5CmptJcEENMQNv3bkW7mc3pcz8bl8xilKN1ka0i7HMfDMsHo42wqIdiWVqlSmSlbGHLVwTRleII
24620 tMFrccpPVnxXeGSnxH+csUk/tFJ96Aa7kuTLbWl82PnmKLn06OeHOxKTTExowoTgCD3i6UvbVqix
24621 wMlue5i80PKIuKoN0VEhCJLd2KzHnushxJSjuySFXnewP3IwkIkrH0WYpRCBkewfWnSTc1TRyvfF
24622 RwuqEtgqy3gt/hkTdXYUVl0cqEiFyE5ozlugL+GXpS32pwkdjNIqncjNWnXwYBZaEVSm+CIyQekv
24623 jYTffaDkpjqpzpOym6a8HmepKk2KcAS5J+OcV0JDAIXJioPMEZQaxJd6Kkqfe1RTNxfquWNRBFo6
24624 oV0qbvNQ6BQxjP/4TOGSpBSKUDQVEH2awHrTupKa9KQoTWl0AgIAOw==
24626 logo = PhotoImage(data=ADIlogo)
24627 ADI1 = Label(frame2r, image=logo, anchor=
"sw", compound=
"top")
24628 ADI1.pack(side=TOP)
24632 if ButtonOrder == 1:
24633 CHAlab = Button(frame3, text=
"CA V/Div", style=
"Rtrace1.TButton", command=SetScaleA)
24634 CHAlab.pack(side=LEFT)
24635 CHAsb = Spinbox(frame3, cursor=
'double_arrow', width=4, values=CHvpdiv, command=BCHAlevel)
24637 CHAsb.bind(
'<MouseWheel>', onSpinBoxScroll)
24638 CHAsb.bind(
"<Button-4>", onSpinBoxScroll)
24639 CHAsb.bind(
"<Button-5>", onSpinBoxScroll)
24640 CHAsb.pack(side=LEFT)
24641 CHAsb.delete(0,
"end")
24642 CHAsb.insert(0,0.5)
24644 if ButtonOrder == 0:
24645 CHAlab = Button(frame3, text=
"CA V/Div", style=
"Rtrace1.TButton", command=SetScaleA)
24646 CHAlab.pack(side=LEFT)
24648 if ButtonOrder == 1:
24649 CHAofflab = Button(frame3, text=
"CA V Pos", style=
"Rtrace1.TButton", command=SetVAPoss)
24650 CHAofflab.pack(side=LEFT)
24651 CHAVPosEntry = Entry(frame3, width=5, cursor=
'double_arrow')
24652 CHAVPosEntry.bind(
"<Return>", BOffsetA)
24653 CHAVPosEntry.bind(
'<MouseWheel>', onTextScroll)
24654 CHAVPosEntry.bind(
"<Button-4>", onTextScroll)
24655 CHAVPosEntry.bind(
"<Button-5>", onTextScroll)
24656 CHAVPosEntry.bind(
'<Key>', onTextKey)
24657 CHAVPosEntry.pack(side=LEFT)
24658 CHAVPosEntry.delete(0,
"end")
24659 CHAVPosEntry.insert(0,2.5)
24660 if ButtonOrder == 0:
24661 CHAofflab = Button(frame3, text=
"CA V Pos", style=
"Rtrace1.TButton", command=SetVAPoss)
24662 CHAofflab.pack(side=LEFT)
24664 if ButtonOrder == 1:
24665 CHAIlab = Button(frame3, text=
"CA mA/Div", style=
"Strace3.TButton", command=SetScaleIA)
24666 CHAIlab.pack(side=LEFT)
24667 CHAIsb = Spinbox(frame3, cursor=
'double_arrow', width=4, values=CHipdiv, command=BCHAIlevel)
24668 CHAIsb.bind(
'<MouseWheel>', onSpinBoxScroll)
24669 CHAIsb.bind(
"<Button-4>", onSpinBoxScroll)
24670 CHAIsb.bind(
"<Button-5>", onSpinBoxScroll)
24671 CHAIsb.pack(side=LEFT)
24672 CHAIsb.delete(0,
"end")
24673 CHAIsb.insert(0,50.0)
24674 if ButtonOrder == 0:
24675 CHAIlab = Button(frame3, text=
"CA mA/Div", style=
"Strace3.TButton", command=SetScaleIA)
24676 CHAIlab.pack(side=LEFT)
24678 if ButtonOrder == 1:
24679 CHAIofflab = Button(frame3, text=
"CA I Pos", style=
"Rtrace3.TButton", command=SetIAPoss)
24680 CHAIofflab.pack(side=LEFT)
24681 CHAIPosEntry = Entry(frame3, width=5, cursor=
'double_arrow')
24682 CHAIPosEntry.bind(
"<Return>", BIOffsetA)
24683 CHAIPosEntry.bind(
'<MouseWheel>', onTextScroll)
24684 CHAIPosEntry.bind(
"<Button-4>", onTextScroll)
24685 CHAIPosEntry.bind(
"<Button-5>", onTextScroll)
24686 CHAIPosEntry.bind(
'<Key>', onTextKey)
24687 CHAIPosEntry.pack(side=LEFT)
24688 CHAIPosEntry.delete(0,
"end")
24689 CHAIPosEntry.insert(0,0.0)
24690 if ButtonOrder == 0:
24691 CHAIofflab = Button(frame3, text=
"CA I Pos", style=
"Rtrace3.TButton", command=SetIAPoss)
24692 CHAIofflab.pack(side=LEFT)
24694 if ButtonOrder == 1:
24695 CHBlab = Button(frame3, text=
"CB V/Div", style=
"Strace2.TButton", command=SetScaleB)
24696 CHBlab.pack(side=LEFT)
24697 CHBsb = Spinbox(frame3, width=4, cursor=
'double_arrow', values=CHvpdiv, command=BCHBlevel)
24698 CHBsb.bind(
'<MouseWheel>', onSpinBoxScroll)
24699 CHAIsb.bind(
"<Button-4>", onSpinBoxScroll)
24700 CHAIsb.bind(
"<Button-5>", onSpinBoxScroll)
24701 CHBsb.pack(side=LEFT)
24702 CHBsb.delete(0,
"end")
24703 CHBsb.insert(0,0.5)
24705 if ButtonOrder == 0:
24706 CHBlab = Button(frame3, text=
"CB V/Div", style=
"Strace2.TButton", command=SetScaleB)
24707 CHBlab.pack(side=LEFT)
24709 if ButtonOrder == 1:
24710 CHBofflab = Button(frame3, text=
"CB V Pos", style=
"Rtrace2.TButton", command=SetVBPoss)
24711 CHBofflab.pack(side=LEFT)
24712 CHBVPosEntry = Entry(frame3, width=5, cursor=
'double_arrow')
24713 CHBVPosEntry.bind(
"<Return>", BOffsetB)
24714 CHBVPosEntry.bind(
'<MouseWheel>', onTextScroll)
24715 CHBVPosEntry.bind(
"<Button-4>", onTextScroll)
24716 CHBVPosEntry.bind(
"<Button-5>", onTextScroll)
24717 CHBVPosEntry.bind(
'<Key>', onTextKey)
24718 CHBVPosEntry.pack(side=LEFT)
24719 CHBVPosEntry.delete(0,
"end")
24720 CHBVPosEntry.insert(0,2.5)
24721 if ButtonOrder == 0:
24722 CHBofflab = Button(frame3, text=
"CB V Pos", style=
"Rtrace2.TButton", command=SetVBPoss)
24723 CHBofflab.pack(side=LEFT)
24725 if ButtonOrder == 1:
24726 CHBIlab = Button(frame3, text=
"CB mA/Div", style=
"Strace4.TButton", command=SetScaleIB)
24727 CHBIlab.pack(side=LEFT)
24728 CHBIsb = Spinbox(frame3, width=4, cursor=
'double_arrow', values=CHipdiv, command=BCHBIlevel)
24729 CHBIsb.bind(
'<MouseWheel>', onSpinBoxScroll)
24730 CHBIsb.bind(
"<Button-4>", onSpinBoxScroll)
24731 CHBIsb.bind(
"<Button-5>", onSpinBoxScroll)
24732 CHBIsb.pack(side=LEFT)
24733 CHBIsb.delete(0,
"end")
24734 CHBIsb.insert(0,50.0)
24735 if ButtonOrder == 0:
24736 CHBIlab = Button(frame3, text=
"CB mA/Div", style=
"Strace4.TButton", command=SetScaleIB)
24737 CHBIlab.pack(side=LEFT)
24739 if ButtonOrder == 1:
24740 CHBIofflab = Button(frame3, text=
"CB I Pos", style=
"Rtrace4.TButton", command=SetIBPoss)
24741 CHBIofflab.pack(side=LEFT)
24742 CHBIPosEntry = Entry(frame3, width=5, cursor=
'double_arrow')
24743 CHBIPosEntry.bind(
"<Return>", BIOffsetB)
24744 CHBIPosEntry.bind(
'<MouseWheel>', onTextScroll)
24745 CHBIPosEntry.bind(
"<Button-4>", onTextScroll)
24746 CHBIPosEntry.bind(
"<Button-5>", onTextScroll)
24747 CHBIPosEntry.bind(
'<Key>', onTextKey)
24748 CHBIPosEntry.pack(side=LEFT)
24749 CHBIPosEntry.delete(0,
"end")
24750 CHBIPosEntry.insert(0,0.0)
24751 if ButtonOrder == 0:
24752 CHBIofflab = Button(frame3, text=
"CB I Pos", style=
"Rtrace4.TButton", command=SetIBPoss)
24753 CHBIofflab.pack(side=LEFT)
24755 if ShowBallonHelp > 0:
24756 CHAlab_tip =
CreateToolTip(CHAlab,
'Select CHA-V vertical range/position axis to be used for markers and drawn color')
24757 CHBlab_tip =
CreateToolTip(CHBlab,
'Select CHB-V vertical range/position axis to be used for markers and drawn color')
24758 CHAIlab_tip =
CreateToolTip(CHAIlab,
'Select CHA-I vertical range/position axis to be used for markers and drawn color')
24759 CHBIlab_tip =
CreateToolTip(CHBIlab,
'Select CHB-I vertical range/position axis to be used for markers and drawn color')
24760 CHAofflab_tip =
CreateToolTip(CHAofflab,
'Set CHA-V position to DC average of signal')
24761 CHBofflab_tip =
CreateToolTip(CHBofflab,
'Set CHB-V position to DC average of signal')
24762 CHAIofflab_tip =
CreateToolTip(CHAIofflab,
'Set CHA-I position to DC average of signal')
24763 CHBIofflab_tip =
CreateToolTip(CHBIofflab,
'Set CHB-I position to DC average of signal')
24769 root.geometry(
'+300+0')
24770 root.protocol(
"WM_DELETE_WINDOW", Bcloseexit)
24772 if not numpy_found:
24774 showwarning(
"WARNING",
"Numpy not found!")
24779 BoardStatus = IntVar(0)
24784 if EnableScopeOnly == 0:
24787 AWGScreenStatus.set(1)
24790 if LocalLanguage !=
"English":
24798 showwarning(
"WARNING",
"Pysmu not found!")